更改父对象,不会更改其他对象的原型链

Changing parent object , doesn't change prototype chain in other

我有两个对象 foo 和 bar。 Object.create 构建对象 bar 将其原型设置为 foo - 好的。当我更新 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

帮助。也许我错过了一些明显的东西。

因为你的foo只是对对象的引用。当您将其设置为原型时,它会在 bar 中创建第二个引用并引用同一个对象。然后,当您更改 foo 变量 时,它只是对对象的引用,以保留另一个变量(如数字),它会从 object。所以你只有一个引用,它在 barprototype 中引用对象。

[]被认为是变量的值。

                        -----
  foo[obj address] ---> |obj|
                        -----
                          ^
                          |
                 bar.prototype[obj address]

foo = 2

之后
                        -----
   foo[2]               |obj|
                        -----
                          ^
                          |
                 bar.prototype[obj address]