JS原生-原型污染 原型继承 原型覆盖性和排查原型链bug的技巧

//原型的继承性
var b={};
b.__proto__.name="qinyi";

var t=function() {

};

console.log(b.name);
console.log(new Object().name);
console.log(new t().name);


//原型链的原型污染
//由于此时通过{}修改了{}的原型属性name的指针指向,导致Object对象的原型属性name为秦乙,而不是qinyi
var temp={}.__proto__.name="秦乙";
console.log(new Object().name);

//原型链的多态性
var c=function () {

};
c.prototype.age=23;
c.prototype.name="王五";
//由于c函数的原型指针指向了自定义对象,所以原型链原有的原型属性会被消除
c.prototype={name:"wangwu"};
//变量c和变量t的函数虽然都是function函数,但是在内存中是开辟了两个不同的内存单元,
//所以这两个匿名函数是两个不同的匿名,因此c的原型name不会和t的原型name一致
console.log(new c().name);
console.log(new c().age);
console.log(new t().name);

//由于objC变量里的c实例设置了实例的name属性
//对象自身的属性高于原型优先级,所以objc的name属性为李四
var objC=new c().name="李四";
console.log(objC);

猜你喜欢

转载自blog.csdn.net/qq_38603437/article/details/92759577