您的位置:首页 > Web前端 > JavaScript

JS的prototype的共享机制分析

2016-04-21 15:54 471 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: