Recomendações relacionadas: Tutorial de JavaScript
(Conceito) Cadeia de protótipos refere-se a uma lista vinculada composta de alguns protótipos por meio de ponteiros __proto__ Uma cadeia de protótipos pode servir objetos que desejam compartilhar dados na cadeia de protótipos e é usada. para implementar o mecanismo de herança JavaScript.
(Ponteiro de cadeia de protótipo) Ponteiros envolvidos na cadeia de protótipo:
função UMA() { } seja a1 = novo A() seja a2 = novo A() seja a3 = novo A() // Essas linhas de código gerarão a cadeia de protótipos mostrada abaixo
etc. teste: "" } deixe a1 = Object.create(A) deixe a2 = Object.create(A) deixe a3 = Object.create(A) // Estas linhas de código correspondem à cadeia de protótipos mostrada abaixo
função UMA() { } seja a1 = novo A() seja a2 = novo A() seja a3 = novo A() // Essas linhas de código gerarão a cadeia de protótipos mostrada abaixo
A cadeia de protótipos envolvendo herança pode ser analisada usando um diagrama simplificado
// Use o modo de combinação parasita para implementar a função herdada C() {} função B() {} B.protótipo = novo C() função A() {} A.protótipo = novo B() seja a1 = novo A() seja a2 = novo A() seja a3 = novo A()
da cadeia de protótipos O ponto final da cadeia de protótipos é nulo, o que não se refere a um objeto protótipo
.A dinâmica do protótipo é explicada em detalhes em "Programação Orientada a Objetos", e envolve principalmente a reescrita e modificação do protótipo. Aqui estão alguns exemplos.
Exemplo 1—Prototype Dynamics
var A = function() {}; A.protótipo.n = 1; var b = novo A(); A.protótipo = { n: 2, m: 3 } var c = novo A(); console.log(bn); //1 console.log(bm); console.log(cn); console.log(cm); // 3
Exemplo 2 - Dinâmica do protótipo e cadeia inferior da cadeia de protótipos
var F = function() {}; Object.prototype.a = função() { console.log('a'); }; Função.prototype.b = função() { console.log('b'); } varf = novo F(); fa(); // uma fb(); // O atributo b não existe Fa(); Fb(); //
bConsulte a primeira imagem no "Protótipo de diagrama de cadeia que não envolve herança" mencionado acima, você pode desenhar o seguinte problema de análise de diagrama de referência simplificado.
Exemplo 3 — Dinâmica de protótipo e cadeia de protótipo
Função inferior da cadeia Pessoa(nome) { este.nome = nome } deixe p = new Pessoa('Tom'); console.log(p.__proto__) // Pessoa.prototype console.log(Person.__proto__) // Function.prototype
Exemplo 4 — Dinâmica de protótipo e cadeia de protótipo Cadeia inferior
var foo = {}, F = function(){}; Object.prototype.a = 'valor a'; Function.prototype.b = 'valor b'; Objeto.protótipo = { a: "valor a" } Função.prototype = { b: "valor b" } console.log(foo.a); console.log(foo.b); // indefinido console.log(Fa); //valor a console.log(Fb); // o valor b
refere-se à primeira imagem no "Diagrama de cadeia de protótipo que não envolve herança" mencionado acima para desenhar o seguinte problema de análise de diagrama de referência simplificado. Como foo e F vinculam seus protótipos quando são declarados, eles obtêm o endereço do protótipo armazenado na memória heap através do ponteiro armazenado na memória da pilha. Primeiro, o protótipo é modificado. A operação de modificação modificará o protótipo na memória heap e F ainda poderá acessar o resultado modificado através do ponteiro da memória da pilha. A segunda etapa é reescrever o protótipo. JS é tudo "operações de transferência de valor". Depois de reescrever o protótipo, primeiro abra um novo espaço na memória heap para armazenar o novo protótipo e, em seguida, abra um novo espaço na memória da pilha. para armazenar o ponteiro na memória heap. Neste momento, como os ponteiros de memória da pilha mantidos por foo e F são diferentes dos novos ponteiros de memória da pilha, foo e F não podem acessar o protótipo reescrito.
Recomendações relacionadas: Tutorial de aprendizagem de JavaScript
acima é uma explicação detalhada da cadeia de protótipos de JavaScript com imagens e textos. Para obter mais informações, preste atenção a outros artigos relacionados no site PHP chinês!