JavaScript中Array.apply的第一个参数是什么?

时间:2016-01-24 13:53:15

标签: javascript arrays prototype

an answer中,@ Tushar提出了与以下内容相对应的语法。

Array.apply(null, Array(3).fill(10))
  .map(function (item, index) { 
    return item + index;
  });

我明白这里发生了什么,我很满意。但是,它让我有点不知道这个 null 值的参数看起来什么也没做。所以我开始研究。根据智慧on the web,它是对 this 的引用。现在,这给了我很少的清晰度,尽管将黄瓜,阵列和物体放入其中,但它并没有影响杰克,据我所知。事实上,我很好奇为什么以下内容不相同,更不用说了。

Array(3).fill(10)
  .map(function (item, index) { 
    return item + index;
  });

接下来,我读到了一些关于Cr IE不接受类似数组的对象的东西,它告诉我更少。此外,验证文章的年龄有点困难,因此其索赔的有效性难以评估。我得到了关于原型构造函数的讨论并放弃了,不确定我是否走在正确的道路上。

2 个答案:

答案 0 :(得分:3)

apply的第一个参数仅在您使用使用this的函数时才重要。

运行以下代码段应该让它更清晰:

var o = {value: 1};

var fn = function(a) {
    console.log(a + this.value);
}
value = "something else";

fn("an argument ");
fn.apply(o, [20]);

// the above prints:
// an argument something else
// 21

https://jsfiddle.net/f2zw8edd/

答案 1 :(得分:0)

Array(number)创建一个给定大小的数组,但它不会填充任何数据点。因此,调用mapfill或其他任何内容都不会有用。

另一方面,

Array(item1, item2, item...)创建一个数组,其中给定的项目作为数组的元素。您可以拨打mapfill,无论您想要什么,都可以使用。

那么如何使用它来创建一个可以调用map的给定大小的数组?正是你看到的方式。

Array.apply(null,Array(3))做的是创建一个大小为3的未填充数组,然后将这3个未定义的项作为参数传递给Array,从而导致 Array(undefined,undefined,undefined),它会为您提供map pable数组。请注意,您在此处创建了两个数组,但Array(3)在使用后会被丢弃。

那么为什么null?那是因为在创建数组时,this没有相关的地方。由于上下文无关紧要,您可以将任何您想要的内容作为上下文传递,并且运行得很好,但是最简单的理解是,如果传递上下文并不重要null