【发布时间】:2017-01-09 09:01:13
【问题描述】:
这里我有一个简单的代码来了解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);
【问题讨论】:
标签: javascript oop prototype