2017-09-16 48 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