我有两个对象foo和bar。 Object.create内置对象栏将其原型设置为foo - ok。当我更新foo属性时一切正常,但是当我将整个foo对象更改为数字时,对象栏不会更改。好像前面的对象foo在某个地方,但我不知道在哪里。我非常好奇。
var foo = { name: "foo" };
var bar = Object.create(foo);
foo = 2 //I change foo
console.log(bar)
//in Chrome console I see:
Object {}
__proto__: Object // __proto__ of bar shows to object
name: "foo"
__proto__: Object
帮助。也许我会错过一些明显的东西。
答案 0 :(得分:1)
因为foo
仅是对象的引用。当您将其设置为原型时,它会在bar
中创建第二个引用并引用同一个对象。然后,当您更改foo
变量(仅是对象的引用)时,要保留另一个变量(如数字),它会从foo
中删除object
引用}。因此,您只有prototype
引用该对象的bar
中的一个引用。
[]
被视为变量的值。
-----
foo[obj address] ---> |obj|
-----
^
|
bar.prototype[obj address]
foo = 2
之后
-----
foo[2] |obj|
-----
^
|
bar.prototype[obj address]