[题目]关于原型链中的prototype被新的对象覆盖

//只修改prototype下的变量
var A=function(){};
A.prototype.n=1;
var b= new A(); //修改prototype前的对象
A.prototype.n=2;
A.prototype.m=3;

var c=new A();  //修改prototype后的对象
console.log(b.n,b.m,c.n,c.m) //2 3 2 3
//b和c的__proto__指向都是相同的{n:2,m:3} 且原型都是function A
//直接覆盖prototype
var A=function(){};
A.prototype.n=1; 
var b= new A();  //修改prototype前的对象
A.prototype={n:2,m:3}

var c=new A(); //修改prototype后的对象
console.log(b.n,b.m,c.n,c.m) //1 undefined 2 3 
//b指向原型A{n:1}  c指向一个新的对象{n:2,m:3}

经过查阅红宝书第166关于继承相关的内容之后发现,使用对象字面量创建原型方法会重写原型链,理由是对象是一个Object实例,而原来A.prototype是一个关于A的实例,至此发现原型链遭到破坏

posted @ 2020-07-29 16:12  纪春生  阅读(229)  评论(0编辑  收藏  举报