【问题标题】:What's the first argument of Array.apply in JavaScript?JavaScript 中 Array.apply 的第一个参数是什么?
【发布时间】:2016-01-24 13:53:15
【问题描述】:

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 不接受类似数组的对象,这告诉我更少。此外,验证文章的年代有点困难,因此很难评估其声明的有效性。我谈到原型构造函数并放弃了,不确定我是否走在正确的道路上。

【问题讨论】:

    标签: javascript arrays prototype


    【解决方案1】:

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

    运行下面的 sn -p 应该会更清楚一点:

    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/

    【讨论】:

      【解决方案2】:

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

      Array(item1, item2, item...) 另一方面创建一个数组,其中给定的项目作为数组的元素。你可以打电话给mapfill,任何你想要的,它都会起作用。

      那么你如何使用它来创建一个给定大小的数组,你可以在上面调用map 呢?和你看到的完全一样。

      Array.apply(null,Array(3)) 所做的是创建一个大小为 3 的未填充数组,然后将这 3 个未定义项作为参数传递给 Array,从而得到
      Array(undefined,undefined,undefined),它为您提供mappable大批。需要注意的是,您在这里创建了两个数组,但 Array(3) 在使用后会被丢弃。

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

      【讨论】:

      • 我将两个代码示例都粘贴到浏览器的控制台中。出来,有 [10, 11,12] 来了,我看不出这两者之间有什么区别。我错过了什么?
      • Fill 确实可以填补空洞。
      猜你喜欢
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多