Configuración masiva de propiedades y métodos públicos en prototipos
案例一
普通:
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. Crea un alias
Asigne la dirección a la que apunta el prototipo original a nuestro pro, ahora operan en el mismo espacio de memoria
案例一拓展
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. Refactorización del método del objeto prototipo
Abra una memoria de montón usted mismo, almacene nuestras propiedades y métodos públicos, y reemplace el desarrollado originalmente por el navegador para 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
punto de conocimiento
1. Solo hay un constructor en la memoria del montón que el navegador creó para Fn.prototype , pero no tenemos esta propiedad propia, por lo que el constructor no apunta a Fn sino al objeto. , necesitamos agregar manualmente el apuntamiento del constructor
2. Agregue propiedades públicas
a las clases integradas de esta manera Agregue métodos de deduplicación de matriz a las clases integradas Array
案例二
普通
Array.prototype.unique = function(){
};
或者
Array.prototype = {
constructor:Array,
unique:function(){
}
};
console.dir(Array.prototype);
Nuestro método reemplazará las propiedades y los métodos que existían antes en el prototipo, por lo que si modificamos la clase integrada de esta manera, el navegador la bloqueará.
Pero podemos modificar los métodos incorporados uno por uno. Cuando agregamos métodos al prototipo de la matriz de la siguiente manera, si el nombre del método se duplica con el método incorporado original, el método incorporado se modificará y
lo agregaremos al prototipo de la clase integrada más adelante. Para agregar métodos, debe agregar un prefijo especial al nombre
案例二拓展
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);