JS的prototype的共享机制分析

时间:2023-03-08 17:12:02
JS的prototype的共享机制分析
function Super(){
}
Super.prototype.aaa=[1,2,3];
Super.prototype.bbb=1; function Sub(){
Super.call(this);
}
Sub.prototype=new Super();
Sub.prototype.constructor=Sub; var a=new Sub();
var b=new Sub(); a.bbb=5; //当这句话执行的时候,并不是操作prototype上的bbb,而是给a对象添加了一个bbb属性
alert(a.bbb); //这里弹出的是刚才添加的bbb属性,因为已经找到刚才添加的了,所以不会在prototype上找了
delete a.bbb; //删除了刚才添加的bbb属性
alert(a.bbb); //这下就能弹出prototype上的bbb了 a.aaa[0]=5; //而这句话就不一样了,并不是创建aaa属性,而是修改prototype上的aaa[0]。通过语法可以看出
alert(b.aaa[0]); //那么b对象也会受影响,会弹出5
a.aaa=[]; //而这里也是创建了一个aaa属性,并不会修改prototype的aaa
alert(b.aaa[1]); //不会受到上一句的影响,会弹出prototype上的aaa[0]即数字2
a.aaa[0]=9; //这里也不一样了,因为上面在a对象上直接创建了个aaa数组,所以是修改的上面刚创建的aaa,而不是prototype上的
alert(a.aaa[0]); //这里会弹出9
alert(b.aaa[0]); //这里会弹出5