var aa={a:1,b:[1,2,3]};var bb=Object.create(aa);var cc=Object.create(aa);
bb.b=[1,2];
console.log(bb.b);
console.log(aa.b);cc.b.push(3);
console.log(cc.b);
console.log(aa.b);
输出如下,请问为什么用=赋值就不会改变原型aa的属性的值,但是push就会改变呢
1 回答

红颜莎娜
TA贡献1842条经验 获得超12个赞
Object.create
比较特别。
var cc = Object.create(aa); cc instanceof aa.constructor //trueaa.isPrototypeOf(cc) //truecc.hasOwnProperty('b') //falseaa.hasOwnProperty('b') //true
*cc
并没有自己的b
属性,之所以能够执行cc.b.push(3)
,是因为cc
可以找到它的原型对象上的b
属性。
如果是这种情况,
*cc.b = [1,2]
相当于给自己加一个b
属性,这个b
是cc
自己的。
此时
cc.b = [1,2] cc.hasOwnProperty('b') //true
添加回答
举报
0/150
提交
取消