有没有办法在这个上下文中向`.call()`发送更多参数?

时间:2016-04-02 20:39:30

标签: javascript

给出以下代码:

/*jslint white:true, devel:true*/
var foo = function () {
  'use strict';
  console.log(
    Array.prototype.slice.call(
      /* How can I send more arguments to call after 'arguments'? */
      arguments,
      /*
       This function gets sent to slice.
       If I sent a '2' it would start the array at the third index.
       */
      function () {
        console.log("bar");
      }
    )
  );
};

foo(1, 2, 3, 4, 5, 6);

我正在努力更好地理解参数在此上下文中的工作原理。似乎第二个参数总是被发送到切片。

有没有办法在此上下文中发送另一个参数来调用?或者我是否需要将代码与.slice()分开重写.call()

更新

我不确定为什么这会被低估。我的概念误解是.slice正在接管,而不是通过.call()传递所有论点。感谢Quentin澄清它。

1 个答案:

答案 0 :(得分:2)

  

似乎第二个参数总是被发送到切片。

call的第一个参数是this应该处理的slice的值。即如果arguments.slice(...)是一个数组而不是类似数组的对象,它就像arguments一样,它没有自己的slice方法。

call的第二个参数是slice的第一个参数。即数组中的偏移量以开始切片。传递函数并不像你在问题中那样有意义。

  

有没有办法在此上下文中发送另一个参数来调用?

是。就这么做。

call的第三个参数是slice的第二个参数。即停止切片的索引。

call的第四个参数是slice的第三个参数,但slice只接受两个参数,因此再传递它是没有意义的。