猿问

javascript object.create的问题

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就会改变呢

牧羊人nacy
浏览 587回答 1
1回答

红颜莎娜

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
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答