Padrão de cadeia de protótipo (em profundidade)

Configuração em massa de propriedades e métodos públicos em protótipos

案例一
普通:
function Fn(){
    
    
this.x = 100;
}
Fn.prototype.getX = function(){
    
    
console.log(this.x);
};
Fn.prototype.getY = function(){
    
    
console.log(this.x);
};
Fn.prototype.getZ = function(){
    
    
console.log(this.x);
};
var f1 = new Fn;

1. Crie um alias

Atribua o endereço apontado pelo protótipo original ao nosso pro, agora eles operam no mesmo espaço de memória

案例一拓展
function Fn(){
    
    
this.x = 100;
}
var pro = Fn.prototype;
pro.getX = function(){
    
    
console.log(this.x);
};
pro.getY = function(){
    
    
console.log(this.x);
};
pro.getZ = function(){
    
    
console.log(this.x);
};
var f1 = new Fn;

2. Refatorando o método do objeto protótipo

Abra uma memória heap por conta própria, armazene nossas propriedades e métodos públicos e substitua o originalmente desenvolvido pelo navegador por Fn.prototype

案例一拓展:
function Fn(){
    
    
this.x = 100;
}
constructor:Fn,
Fn.prototype = {
    
    
a:function(){
    
    
},
b:function(){
    
    
}
};
var f= new Fn;
f.a();>>可以执行
console.log(f.constructor);
>>object

Ponto de conhecimento

1. Existe apenas um construtor na memória heap que o navegador criou para Fn.prototype, mas não temos essa propriedade em nossa própria, então o construtor aponta não para Fn, mas para o objeto.
Para ser consistente com o original , precisamos adicionar manualmente o apontador do construtor

2. Adicione propriedades públicas
a classes internas dessa maneira Adicione métodos de desduplicação de matriz a classes internas Array

案例二
普通
Array.prototype.unique = function(){
    
    
};
或者
Array.prototype = {
    
    
constructor:Array,
unique:function(){
    
    
}
};
console.dir(Array.prototype);

Nosso método substituirá as propriedades e métodos que existiam no protótipo antes, portanto, se modificarmos a classe interna dessa maneira, o navegador a bloqueará.

Mas podemos modificar os métodos internos um por um. Quando adicionamos métodos ao protótipo do array da seguinte maneira, se o nome do método for duplicado com o método interno original, o método interno será modificado e
vamos adicioná-lo ao protótipo da classe interna mais tarde. Para adicionar métodos, você precisa adicionar um prefixo especial ao nome

案例二拓展
Array.prototype.sort=function(){
    
    
console.log(this);
>>this是ary当前操作的这个数组
}
var ary = [1,2,2,3,2,1,3,4,1,2];
ary.sort();
console.log(ary);

Acho que você gosta

Origin blog.csdn.net/yilingpupu/article/details/105486865
Recomendado
Clasificación