Recentemente, vi uma biblioteca JS escrita por outra pessoa. De repente, tive algumas idéias sobre o protótipo e a herança no JS. Eu já vi alguns deles antes, mas eles não estão muito claros. Atualmente, usei meu tempo livre para entender essa área e ainda sinto que há algo errado com ela. A idéia não é tão organizada, apenas para compartilhar.
1. Instância de
No JavaScript, existe a instância do operador, que é um operador binário. Use o método Instancea Instância de A, e o valor de retorno é um booleano, o que significa determinar se a Instancea é uma instância de A, e sua essência é determinar se A.prototype === Instancea .__ Proto__, como como
função f2 () {var f = function () {} var test = new f (); console.log (instância de teste de f); // true console.log ((f.prototype ==== test .__ proto __)); // true}Ambas as impressões acima são verdadeiras. Indica que o teste é uma instância de f; O atributo __proto__ dos pontos de teste para o objeto de protótipo de f, ou seja, a propriedade do protótipo de f é um objeto, e esse objeto é uma instância de f.
2. Objetos em JS
Tudo é um objeto em JS. Os objetos são divididos em objetos de função e objetos comuns. Funções comuns são realmente objetos de função, como
// função objeto var f = function () {} var f2 = new function ('str', 'console.log (str)') função f3 () {} // objeto comum var o = new object (); var o2 = {} var o3 = novo f ()Como mostrado acima, F, F2 e F3 são objetos de função e O, O2 e O3 são objetos comuns.
A diferença entre um objeto de função e um objeto normal:
Todos os objetos criados usando a nova função () são objetos de função, F e F3, e, finalmente, eles também são criados usando a nova função ();
Ao definir um objeto, o objeto contém algumas propriedades predefinidas, como protótipo e __proto__. O atributo do protótipo está disponível apenas nos objetos de função e __proto__ está disponível para todos os objetos. Portanto, pode ser determinado pelo atributo __proto__ do objeto do objeto para determinar se um objeto é um objeto de função ou um objeto normal, como
// função objeto var f = function () {} // objeto comum var o = new Object (); console.log (f.prototype); // objeto {} console.log (o.prototype); // indefinidoDo exposto, podemos descobrir que o objeto de função possui um atributo de protótipo, enquanto o objeto de protótipo de objetos comuns é indefinido.
3. Cadeia de protótipo
Do exposto, sabemos que todos os objetos têm um atributo __proto__, que aponta para o protótipo protótipo do objeto do objeto de função que o criou. Chamamos essa cadeia com cordas usando o atributo __proto__ de uma cadeia de protótipo, como a seguinte é uma cadeia de protótipo.
A foto acima, tendo uma pessoa como exemplo, ilustra a cadeia de protótipo.
var pessoa = function () {} var pessoa1 = new Person ();1. Pessoa é um objeto de função, pessoa1 é uma instância de pessoa
2. O atributo __proto__ de Pessoa1 é o protótipo objeto de pessoa. Prototipo
3. Como o protótipo do protótipo da pessoa Pessoa.Prototype é um objeto, ele também possui um atributo __proto__, que aponta para o objeto de prototipo de objeto.
4. Objeto do protótipo do objeto Objeto.Prototype é um objeto, que também possui um atributo __proto__, e o objeto de protótipo desse atributo é nulo.
4. Alguma herança
Em JS, definiremos um objeto de função, como
var pessoa = function () {}Acima, definimos um objeto de função, que não possui propriedades e é um objeto vazio. Como é um objeto, você pode adicionar propriedades a ele.
var pessoa = function () {} Person.name1 = 'JS'Console.log (Person.name1) // jsO código acima adicionou um atributo de nome à pessoa e atribuiu um valor ao JS, e o valor do atributo de nome pode ser impresso.
Mas quando criamos uma instância de pessoa1, como segue
var pessoa = function () {}; pessoa.name1 = 122; console.log (pessoa.name1); Var Person1 = New Pessoa (); console.log (Person1.name1); // indefinidoVocê pode ver que a pessoa1 não possui o atributo Nome1, então como podemos garantir que as instâncias da pessoa também tenham o atributo Nome1?
var pessoa = function () {}; pessoa.name1 = 122; // Use o objeto de protótipo para adicionar atributos ao objeto, para que as instâncias tenham esse atributo Person.prototype.name1 = '12 '; console.log (pessoa.name1); Var Person1 = New Pessoa (); console.log (Person1.name1); // 12Acima, Pessoa.protoype.name1 = '12 'é usado, para que todas as instâncias tenham o atributo Name1. Os atributos adicionados dessa maneira serão considerados atributos comuns da instância ao gerar a instância.
O artigo acima é baseado em protótipos e herança no JS. Todo o conteúdo que compartilho com você é o editor. Espero que possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.