2011-12-26 60 views
0

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

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

a.length // returns 3 

对我来说这似乎是它可以将非常方便。我看到很多原因,为什么你可能希望将状态或实用程序函数存储在实际的数组本身而不是其他变量上。它甚至比将数组作为对象的属性以及存储在该对象上的其他东西更好。

我的问题是:

有谁知道的任何问题,可通过一段JavaScript阵列上存储的属性?它是否适用于所有浏览器?有没有证据表明这会随着未来版本的Javascript而改变?对于这是否是一种好的做法,有没有一般的看法?

(PS为了记录在案,我并不需要遍历数组在for ... in循环。据我所知,这样的循环将包括性能以及)

回答

1

仅仅抛出一两件事 - 的“复制”阵列原型功能都将无法复制您的任何额外的属性,如果这一点很重要,即.splice.sliceconcat会给你没有currentIndex新的“干净”的阵列, etc

2

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

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

再说一次,没有其他的警告,你救了它。

0

是的,它适用于所有浏览器。它是有效的JavaScript(数组是对象)。人们可以想到为什么要使用Array构造函数而不是对象的一些原因,但如果这是您的首选编码风格,请使用它。

相关问题