我以这种方式使用原型对 Array 进行子类化:
MyArray = function()
{
Array.apply(this, arguments);
};
MyArray.prototype = new Array();
一切正常,我可以用这种方式初始化一个“MyArray”实例:
var arr = new MyArray();
arr.push(1, 2, 3);
问题是 MyArray 实例的快速枚举被破坏了,实际上是以下循环:
for (var i in arr)
{
console.log(i);
}
打印:0、1、2、长度
在实践中,类的每个方法/属性都包含在枚举中。在普通数组中,代码只会打印 0、1、2(这些数字是数组的索引)。
所以...我的问题是:如何通过保留快速枚举来扩展 Array?
ps:在Objective C中,为了实现快速枚举,你必须重写一个方法……在JavaScript中有一个特殊的方法可以重写吗?
注:显然我对“MyArray”的真实实现略有不同,但我贴出的代码足以产生异常的快速枚举循环。不要问我为什么要扩展 Array,我有我的正当理由;)