这里我有一个简单的代码来理解Object.create()
是如何工作的。这里我有一个通用对象用作原型(prototype),它是 prototypeObj
。newObj
是一个其原型(prototype)设置为 prototypeObj
的对象。这里我有另一个名为 session
的对象,它有一个名为 anotherObj
的属性,并且 anotherObj
与 newObj
具有相同的原型(prototype)。但是,向位于 anotherObj
原型(prototype)中的名为 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);
最佳答案
foo
是一个数组,它通过引用工作。
anotherObj: create(newObj.foo)
您正在此处复制引用,因此您的旧对象和新对象都将具有相同的数组引用来插入元素。如果您想要不同的数组引用,您应该首先像这样 create( newObj.foo.slice())
关于javascript - 在 JavaScript 中将对象引用作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41544294/