这个Array.apply方法如何工作?

时间:2015-12-01 12:48:49

标签: javascript

我知道你可以将一个数组传递给undefined但是最近我遇到过这段代码(这是一个很好的方法来创建一个var a = Array.apply( null, { length: 3 } ); 值的数组而不是空槽或孔);

apply

我无法从第二个参数开始理解这段代码是如何工作的。是否有其他语法可用于使其更容易理解的是什么?当我们将实际对象传递给For Each pt In ActiveChart.SeriesCollection(1).Points 而不是数组时,会发生什么?我们可以以某种方式将此对象转换为数组以获得此结果吗?我尝试过很多事情,但没有成功。

2 个答案:

答案 0 :(得分:3)

哦,那太可怕了。

因此,当您将Array作为函数调用时,它并不关心this是什么,因此您可以告诉它thisnull

apply的第二个参数是一个类似数组的对象,它给出了参数列表。

如果你有[0, 0, 0]那么就像这个对象:

{
    0: 0,
    1: 0,
    2: 0,
    length: 3
}

...因为数组获得的长度属性等于其最高索引的值。一个真实的数组会从原型中获得其他属性,但我们(以及applyArray)并不关心它们。

您传递给Array的参数将成为其初始值。

现在,似乎(内部)Array检查其length的{​​{1}},然后使用以下内容设置其内部值:

arguments

如果你有一个仅由for (var i = 0; i < arguments.length; i++) { internal_array_values.push(arguments[0]) } 组成的对象,它将获得{ length: 3 }作为这三个参数中每个参数的值undefined

答案 1 :(得分:1)

http://www.2ality.com/2012/07/apply-tricks.html

使用applyArray(可以用作函数或构造函数),可以将空洞转换为未定义的元素:

 Array.apply(null, ["a",,"b"])
  // [ 'a', undefined, 'b' ]