我使用的原型繼承陣列,以這樣的方式子類的JavaScript陣列打破快速列舉
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](http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/)。此外,這不是JavaScript中的「快速枚舉」,實際上就Array實例而言,它最好稱爲「不正確的枚舉」:-) – Pointy
(這是「不正確的」,因爲除此之外,甚至不能保證規範獲得編號屬性的順序。) – Pointy
@Pointy你可以張貼您的評論作爲答案,以讓我接受它嗎? ;) – daveoncode