这里我有一个简单的代码来了解Object.create()
的工作原理。在这里,我有一个共同的对象用作prototypeObj
的原型。newObj
是一个将其原型设置为prototypeObj
的对象。这里我有另一个名为session
的对象,它有一个名为anotherObj
的属性,anotherObj
与newObj
具有相同的原型。但是将新值添加到名为foo的属性(位于anotherObj
的原型中),也会影响newObj
。为什么我会遇到这种行为?
代码:
var prototypeObj = {
foo: [],
addItemToFoo: function(add) {
this.foo.push(add);
}
}
function create(fooVal) {
var myProto = Object.create(prototypeObj);
myProto.foo = fooVal;
return myProto;
}
var newObj = create([1, 2]); // initialized with [1,2]
session = {
anotherObj: create(newObj.foo) // initialized with [1,2]
}
session.anotherObj.addItemToFoo(6); // pushed 6 to session.anotherObj.foo
console.log("newObj.foo is " + newObj.foo); // newObj also get 6 pushed to its foo property
console.log("anotherObj.foo is " + session.anotherObj.foo);

答案 0 :(得分:1)
foo
是一个数组,它通过引用工作。
anotherObj: create(newObj.foo)
您正在复制此处的引用,因此您的旧对象和新对象都将具有相同的数组引用以插入元素。如果您想要使用不同的数组引用,则应首先将其复制为create(newObj.foo.slice())