自己呼び出し関数で配列を初期化しようとしています。例として簡単にするために、初期値は 0 から 4 までの数字の 2 乗であると仮定します。new
キーワードは新しいオブジェクトを作成するため、this.x
またはで新しく作成されたオブジェクトのフィールドにアクセスできます。キーワードthis[x]
に続く IIFE 本体内new
。コードは次のとおりです。
var arr = new (function() {
for (var i=0; i<5; i++) { this[i]=i*i; }
})();
これで、 、 getarr
などの変数の対応するフィールドにアクセスできます。オブジェクトと同じように扱うだけならまったく問題ありませんが、配列のように扱おうとすると問題が発生します。つまり、次のような関数を適用することはできません。arr[4]
16
arr
reduce
< arr.reduce(...);
> TypeError: arr.reduce is not a function
これarr
は、実際には配列ではなくオブジェクトであるためです。
< arr;
> ({0:0, 1:1, 2:4, 3:9, 4:16})
だからここに私の質問があります:このメソッド内でそのような動作を回避するにはどうすればよいですか? この新しく作成されたオブジェクトを配列として JavaScript に解釈させる方法は?