このように、プロトタイプを使用して配列をサブクラス化しています。
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のみを出力します(これらの数値は配列のインデックスです)。
だから...私の質問は:高速列挙を維持することによって配列を拡張するにはどうすればよいですか?
ps:Objective Cでは、高速列挙を実装するためにメソッドをオーバーライドする必要があります... JavaScriptでオーバーライドする特別なメソッドはありますか?
注:明らかに、「MyArray」の実際の実装は少し異なりますが、投稿したコードは、異常な高速列挙ループを生成するのに十分です。なぜ私が配列を拡張しているのか私に聞かないでください、私には正当な理由があります;)