Comprensión de programación orientada a objetos de JavaScript!

      Quienes tienen conocimientos de programación saben que la orientación a objetos es un concepto muy difícil de entender. El siguiente Xiaoqian compartirá contigo la comprensión del objeto, este artículo comparte principalmente la encapsulación del objeto. Por supuesto, la orientación a objetos en la vida real también es bastante difícil, jajaja ~

      Uno, el modo original del objeto de instancia

      En primer lugar, sabemos que todo objeto es un objeto, por ejemplo, "perro" como objeto tiene dos atributos: "tipo" y "color".

1

      Entonces, necesitamos crear dos objetos instanciados

2

      Esta es también la encapsulación de objetos más básica, es decir, poner los dos atributos de "tipo" y "color" en un objeto. Pero aquí viene el problema. Hay dos problemas con esta forma de escribir: uno es que si quieres generar muchos objetos instanciados, necesitas repetirlo muchas veces, lo cual es muy problemático; el otro es que son muy similar a la estructura del perro prototipo, pero de hecho no se establecen directamente.

      En segundo lugar, la actualización del modelo original

      Código duplicado, podemos escribir una función para resolver

3

      Luego llame a la función para generar un objeto instanciado

4

      Este método puede resolver el complejo problema de generar múltiples códigos de objeto instanciados, pero no existe asociación entre dog1 y dog2, es decir, todavía no refleja que en realidad sean instancias del objeto prototipo Dog.

      Tres, el constructor

      Para resolver el problema de que el objeto instanciado debe generarse a partir del objeto prototipo, js proporciona el concepto de constructor. Por supuesto, el constructor es esencialmente una función ordinaria, pero la función usa esto adentro. Para distinguirlo de las funciones ordinarias, generalmente escribimos en mayúscula la primera letra del constructor. El código específico es el siguiente:

5

      Con este constructor podemos generar objetos instanciados, el código específico es el siguiente:

6

      Aquí podemos ver la palabra clave new, lo que significa que Dog es en realidad un objeto, y dog1 y dog2 son objetos instanciados de Dog; para verificar esto, js proporciona un constructor de propiedad, que se usa para señalar su función de construcción.

7

      Por supuesto, js también tiene otra instancia de operador, que puede verificar la relación entre el objeto prototipo y el objeto instanciado.

8

      El constructor parece perfecto aquí, pero hay un gran inconveniente aquí, que es una pérdida de memoria. Por ejemplo, ahora agregamos una propiedad constante y un método al objeto Dog de la siguiente manera:

9

      当然这里生成实例化方法也还是一样的,但是这里会有一个很大的问题:也就是我们会发现age属性和eat()方法明明是一模一样的内容,但是由于每次生成实例化对象时,都会生成同样的内容,多造成内存浪费。

console.log(dog1.eat == dog2.eat); // false

      如果能让age和eat()在内存中只生成一次,让实例化对象指向同一个内存地址就更完美了。

      四,prototype模式

      js为每一个构造函数都提供了一个prototype属性,让他指向另一个对象,而这个对象的所有属性和方法都会被构造函数的实例对象继承。这也就意味着,只要我们把那些不变的属性和方法定义在prototype对象上即可。

10

      接着再生成实例,此时,所有实例的age个eat()方法都会指向同一个内存地址,也就是prototype对象,这样也就避免了内存浪费问题,从而提供运行效率。

console.log(dog1.eat == dog2.eat); // true

      当然为了验证这一问题,js定义了一些辅助属性。

      1. isPrototypeOf() , 此方法用于验证prototype对象和实例化对象之间的关联

console.log(Dog.prototype.isPrototypeOf(dog1)); // true
console.log(Dog.prototype.isPrototypeOf(dog2)); // true

      2. HasOwnProperty() , 每个实例化对象都有此方法,顾名思义,这个方法是用于验证属性是自有的还是继承自prototype对象的 ; 这里很显然type是自有属性,而age是继承自prototype对象。

console.log (dog1.hasOwnProperty ('type')) // verdadero 
console.log (dog1.hasOwnProperty ('age')) // falso

Este artículo es de Qianfeng Education , indique la fuente para la reimpresión.

Supongo que te gusta

Origin blog.51cto.com/15128702/2678106
Recomendado
Clasificación