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

时间:2017-09-16 06:16:18

标签: javascript prototype chain

我有两个对象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

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

1 个答案:

答案 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]