我正在尝试使用自调用函数初始化一个数组,为了简单起见,假设初始值是从 0 到 4 的数字的平方。new
关键字创建新对象,因此可以使用this.x
或访问新创建对象的字段this[x]
在 IIFE 主体内,跟在new
关键字之后。代码是:
var arr = new (function() {
for (var i=0; i<5; i++) { this[i]=i*i; }
})();
现在,您可以访问变量arr
like的相应字段arr[4]
,并获取16
。如果您只使用 like 处理一个对象,那很好arr
,但是一旦您尝试将其视为数组,您就会遇到问题。即,您不能reduce
对它应用类似的功能:
< arr.reduce(...);
> TypeError: arr.reduce is not a function
那是因为arr
真的是一个对象,而不是一个数组:
< arr;
> ({0:0, 1:1, 2:4, 3:9, 4:16})
所以这是我的问题:如何在这种方法中避免这种行为?如何让 JavaScript 将这个新创建的对象解释为数组?