2017-09-16 50 views
1

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

因为您的foo只是对象的引用。当您将其设置为原型时,它会在bar中创建第二个参考,并引用同一个对象。然后,当您更改foo变量(仅对对象的引用)时,要保留另一个变量(如数字),它会从object中删除foo引用。因此,您只有一个参考文件位于参照该对象的barprototype中。

[]被认为是变量的值。

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

foo = 2

     ----- 
    foo[2]    |obj| 
         ----- 
         ^
          | 
       bar.prototype[obj address] 
+0

好吧,谢谢你,这听起来似乎在理:) – Agata

+0

感谢的解释,我现在明白了:) – Agata