这里我有一个简单的代码来理解Object.create()是如何工作的。这里我有一个可用作原型的通用对象,即prototypeObj,newObj是一个将其原型设置为prototypeObj的对象。这里有另一个名为session的对象,它有一个名为anotherObj的属性,而anotherObj具有与newObj相同的原型。但是向驻留在anotherObj原型中的名为foo的属性添加新值也会影响到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);
发布于 2017-01-09 09:07:25
foo是一个数组,它通过引用工作。
anotherObj: create(newObj.foo)您在这里复制引用,因此旧对象和新对象都将具有相同的数组引用来插入元素。如果您想要有不同的数组引用,您应该首先像下面的create(newObj.foo.slice())那样复制它
https://stackoverflow.com/questions/41544294
复制相似问题