Compreensão de programação orientada a objetos JavaScript!

      Aqueles que têm conhecimento de programação sabem que orientado a objetos é um conceito muito difícil de entender. O seguinte Xiaoqian irá compartilhar com você a compreensão do objeto, este artigo principalmente compartilha o encapsulamento do objeto. Claro, orientado a objetos na vida real também é bastante difícil, hahaha ~

      Um, o modo original do objeto de instância

      Em primeiro lugar, sabemos que todo objeto é um objeto, por exemplo, "cachorro" como objeto tem dois atributos: "tipo" e "cor".

1

      Então, precisamos criar dois objetos instanciados

2

      Este é também o encapsulamento de objeto mais básico, ou seja, colocar os dois atributos de "tipo" e "cor" em um objeto. Mas aí vem o problema. Existem dois problemas com essa forma de escrever: um é que se você deseja gerar muitos objetos instanciados, você precisa repeti-lo várias vezes, o que é muito problemático; o outro é que eles são muito semelhantes à estrutura do protótipo Dog, mas na verdade eles não são estabelecidos diretamente.

      Em segundo lugar, a atualização do modelo original

      Código duplicado, podemos escrever uma função para resolver

3

      Em seguida, chame a função para gerar um objeto instanciado

4

      Este método pode resolver o complexo problema de geração de múltiplos códigos de objetos instanciados, mas não há associação entre dog1 e dog2, ou seja, ainda não reflete que eles são realmente instâncias do objeto de protótipo Dog.

      Três, o construtor

      Para resolver o problema de que o objeto instanciado precisa ser gerado a partir do objeto protótipo, js fornece o conceito de um construtor. Claro, o construtor é essencialmente uma função comum, mas a função usa isso internamente. Para distingui-la das funções comuns, geralmente colocamos a primeira letra do construtor em maiúscula. O código específico é o seguinte:

5

      Com este construtor, podemos gerar objetos instanciados, o código específico é o seguinte:

6

      Aqui podemos ver a palavra-chave new, o que significa que Dog é na verdade um objeto, e dog1 e dog2 são objetos instanciados de Dog; para verificar isso, js fornece um construtor de propriedade, que é usado para apontar para sua função de construção

7

      Obviamente, js também tem outro operador instanceof, que pode verificar o relacionamento entre o objeto protótipo e o objeto instanciado.

8

      O construtor parece ser perfeito aqui, mas há uma grande desvantagem aqui, que é um desperdício de memória. Por exemplo, agora adicionamos uma propriedade constante e um método ao objeto Dog da seguinte maneira:

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')) // true 
console.log (dog1.hasOwnProperty ('age')) // false

Este artigo é da Qianfeng Education . Indique a fonte para a reimpressão.

Acho que você gosta

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