2014-11-04 85 views
1

這是Pet代碼:JS對象,需要的解釋發生了什麼,以及爲什麼

function Pet() { 
    this.vitals = new Vitals(); 
} 

function Vitals() { 
    this.hunger = 5; 
    this.thirst = 0; 
    this.emotions = { 
     happy: true, 
     sad: true 
    } 
} 

下面是調用等等:

$(document).ready(function() { 
    var pet = new Pet(); 
    console.log(pet); 
    pet.vitals.emotions.happy = false; 
    console.log(pet); 
}); 

這是我從控制檯獲取:

console results

曲estion:爲什麼happyfalse在兩個讀數中,而不僅僅是第二個?

+2

請參閱[Chrome的JavaScript控制檯是否懶惰地評估數組?](http://stackoverflow.com/q/4057440/218196) – 2014-11-04 02:51:02

回答

1

可能因爲console.log可以更新已打印的數據,如果基礎對象參考之後更新。嘗試創建另一個名爲pet2的引用來查看該技巧。

順便說一下,您應該檢查thisthis

+1

有趣。有人建議在該鏈接中進行字符串化,這似乎捕獲了執行狀態,而不是當前狀態,因此該鏈接非常有用。 :) – Matt 2014-11-04 02:46:33

+0

確實,這個問題很有趣:) – Mik378 2014-11-04 02:47:19

相關問題