【问题标题】:Are there any downsides to storing properties on Javascript arrays?在 Javascript 数组上存储属性有什么缺点吗?
【发布时间】:2011-12-26 12:40:09
【问题描述】:

我知道 Javascript 数组实际上是对象,并且因为它们是对象,所以它们可以具有属性。这是一个例子:

var a = [1, 2, 3];
a.currentIndex = 2;
a.next = function() { ... };
a.prev = function() { ... };

a.length // returns 3

对我来说,这似乎可以派上用场。我看到了为什么您可能希望将状态或实用程序函数存储在实际数组本身而不是其他变量上的许多原因。它甚至看起来比将数组作为对象的属性以及存储在该对象上的其他内容更好。

这是我的问题:

有谁知道在 Javascript 数组上存储属性的任何问题?它适用于所有浏览器吗?是否有任何证据表明这会随着未来的 Javascript 版本而改变?关于这是否是一种好的做法,有什么普遍的看法吗?

(p.s. 作为记录,我不需要使用 for...in 循环遍历数组。我知道这样的循环也会包含属性)

【问题讨论】:

    标签: javascript


    【解决方案1】:

    既然你已经排除了for in 的问题,我在这里的回答是明确的“不”——没有问题需要担心。所有Array.prototype 方法仅适用于“索引”键(0...n)。

    这里最好的例子是众所周知的 jQuery 库,它也使用类数组对象来存储 DOM 节点,但它也有许多附加到该对象的方法(jQuery 使用那里的原型)。然而,像 Zepto 这样的其他库,只是将这些方法直接放在“数组”对象本身上。

    再说一遍,没有其他警告,您可以省去这样做。

    【讨论】:

      【解决方案2】:

      再丢掉一件事——“复制”数组原型函数都不会复制你的任何额外属性,如果这很重要的话,即.splice.sliceconcat 会给你新的“干净" 没有currentIndex 等的数组

      【讨论】:

        【解决方案3】:

        是的,它适用于所有浏览器。它是有效的javascript(数组是对象)。人们可能会想到为什么要使用 Array 构造函数而不是对象的许多原因,但如果这是您首选的编码风格,那就去吧。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多