向JavaScript对象添加属性时,它们是按有序方式添加的(按字母顺序等)。如果是这样的话,那么当您在JavaScript对象上查找属性时,意味着使用快速算法,如二叉树搜索?我对此进行了搜索,并且发现了很多原型继承的解释,我已经明白了,我只对如何在原型链的单个层次中查找属性感兴趣。
答案 0 :(得分:0)
这完全取决于实施。谷歌的V8引擎可能与Firefox的JagerMonkey不同。他们几乎肯定与IE6不同。在对象中查找属性只是一个接口(程序员称之为相当常见的Map接口)。 Javascript唯一保证的是接口的方法,没有关于实现的细节,这是一件好事。它可能是一个哈希表(可能),也可能是一个链表(不太可能,但可能),或者它甚至可能是一个二叉搜索树。
关键是我们不知道它是如何实施的,我们也不应该。你不应该对实现做出任何假设。正如编程中的抽象一样,只是假设它是神奇的。 :)
答案 1 :(得分:0)
Here是v8如何使用隐藏类进行高级描述,然后使用隐藏类定义提供的固定偏移量查找属性值。它还确认大多数其他实现使用字典类型数据对象。