2017-07-19 147 views
-2

每當我登錄任何JavaScript對象瀏覽器,我很希望通過擴大探索它是什麼在控制檯窗口內, 作爲這樣的一個例子是對象屬性

console.log(console); 

我確定發現裏面是什麼,但真正的查詢現在開始, 當我展開對象時,它有一個名爲__proto__及其子屬性的內部,然後又有一個屬性構造器和週期的推移,因爲它有__proto__和再等等。

什麼時候結束?

如果,這個多次重複是什麼意思?

如果,爲什麼瀏覽器不能在打印這樣的無限對象時掛起?

  • 任何信息高度讚賞

感謝&問候 Shohil Sethia

+2

您可能想了解更多關於[原型鏈](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain)和繼承的內容。連鎖店不會永遠持續下去。 –

回答

0

如果是的,這是什麼多次重複表示?

德里克已經給你一個鏈接解釋原型鏈。

如果否,爲什麼瀏覽器不掛在打印這樣的無限對象上?

__proto__是一個特殊的屬性,將以特殊方式處理。相反,讓我們一般示例:

var a = { 
 
    nest : function() { 
 
    this.b = this; 
 
    } 
 
} 
 

 
a.nest();

這將創建一個對象a具有財產b指向主要對象a本身。

如果你這樣做console.log(a),你會看到類似的行爲,你在__proto__情況下看到。您可以繼續擴展屬性b N次,它將始終顯示具有屬性b和方法nest的對象。

在這種情況下,瀏覽器不掛,因爲它遍歷只有一個性能級別。當您嘗試擴展屬性b時,它將再次只在一個子級屬性上進行迭代。它從不迭代嵌套屬性,因此不會遇到任何問題。另一方面,如果您嘗試使用JSON.stringify(a),它將給出關於循環引用的錯誤,因爲要從所有必須在所有嵌套屬性上迭代的對象中生成字符串。

+0

因此,每次點擊對象時,它會迭代下一個屬性的子級別,這是您的意思? 好吧,我從來沒有通過新的東西。 謝謝! –