我想知道如何在JavaScript引擎(V8,Spidermonkey等)引擎下實現對象。他們真的只是哈希表嗎?如果是這樣,他們如何處理碰撞?在引擎蓋下,是Javascript對象散列表嗎?
10
A
回答
5
首先,對於不同的JS引擎,答案可能有所不同。另外,我假設你正在具體詢問物業存儲;顯然對象也有一堆其他狀態(原型鏈鏈接是顯而易見的)。
在Spidermonkey的情況下,對象基本上有一個鏈接列表(propname,infromation關於屬性)對,直到他們有太多的屬性,當我認爲他們仍然保持鏈接列表(因爲順序對於JS在實踐中),但添加一個帶外散列表,將屬性名稱映射到鏈接列表中的條目。
可能還有其他原因切換到散列表;細節尚未完全確定,未來可能會發生變化。
鏈接列表和哈希表實際上是跨對象共享的;只要兩個對象具有相同的屬性名稱和相關屬性信息(對於具有存儲值的屬性不包括該值)並且屬性按照相同順序設置,則它們能夠共享屬性鏈接列表。
當需要存儲這些屬性值時,實際屬性值將存儲在對象的一個數組中(更確切地說,是兩個數組;一個與對象內聯分配,其大小固定在對象創建時間,一個動態分配並根據需要調整大小,以便稍後添加的屬性)。
-1
相關問題
- 1. XNA在引擎蓋下?
- 2. 引擎蓋下的繼承
- 3. CSS如何在引擎蓋下工作?
- 4. Mockito.when如何在引擎蓋下工作
- 5. callvirt如何在引擎蓋下工作?
- 6. gmail如何在引擎蓋下工作
- 7. WPF綁定路徑在引擎蓋下正常化了嗎?
- 8. Callable如何在引擎蓋下工作?可調用對象如何返回值?
- 9. 索引對象的散列函數
- 10. 如何將散列表向下轉換爲抽象類對象
- 11. PHP flock() - 引擎蓋下有什麼?
- 12. readline函數:引擎蓋下,python
- 13. 引擎蓋下如何遞歸處理
- 14. javascript函數是對象嗎?
- 15. Netty setRadable()引擎蓋
- 16. 使用Javascript - 事件偵聽器的引擎蓋下是如何工作的
- 17. Mongodb查詢(散列表對象)
- 18. 將對象插入散列表(C++)
- 19. 什麼是基於Node.js的引擎蓋下?
- 20. 自動裝箱規則,引擎蓋下是什麼?
- 21. 解碼對象列表到散列的陣列在Perl
- 22. Zend引擎返回的對象引用
- 23. Angular.js從散列/對象
- 24. rails3 will_paginate散列對象
- 25. 覆蓋插件(引擎蓋下的Cobertura)是否報告Spock規範?
- 26. 轉換對象陣列散列映射,由對象的屬性值索引的
- 27. 瞭解JavaScript模板引擎嗎?
- 28. Javascript類型。試圖瞭解它如何在引擎蓋下工作
- 29. JavaScript對象到Java列表
- 30. 覆蓋javascript文件對象
查看此答案http://stackoverflow.com/a/6602088/8338 – 2012-04-21 07:53:29
可能的重複[JavaScript虛擬機如何實現對象屬性訪問?它是散列表?](http://stackoverflow.com/questions/6586670/how-does-javascript-vm-implements-object-property-access-is-it-hashtable) – Newtang 2012-04-21 21:37:35