Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
我已经使用此代码创建从以前的对象继承的新对象有一段时间了。然而,我遇到了一个小惊喜。
a = {
foo: [1,2,3]
}
b = Object.create(a);
// b.foo -> [1,2,3]
b.foo = "test";
// b.foo -> "test"
// a.foo -> [1,2,3]
c = Object.create(a);
// c.foo -> [1,2,3]
c.foo[0] = test ;
// c.foo -> ["test",2,3]
// a.foo -> ["test",2,3]
在尝试更改c.foo
时,我更改了a.foo
,而c.foo
显示了更改,因为它继承了的
。我现在看到的唯一解决方案是只修改b
的直接属性:
d = Object.create(a);
d.foo = Object.create(a.foo);
d.foo[0] = text ;
我确信我缺少一个更好的解决方案如何在不冒修改原始对象的风险的情况下从旧对象创建新对象