为什么使用"调用"?来调用数组切片方法?

时间:2015-09-15 15:01:50

标签: javascript

this SO question

所示
Function.prototype.bind = function(){ 
  var fn = this, args = Array.prototype.slice.call(arguments), object = args.shift(); 
  return function(){ 
    return fn.apply(object, 
      args.concat(Array.prototype.slice.call(arguments))); 
  }; 
};

在此示例中,为什么将其编码为

args = Array.prototype.slice.call(arguments)

如果我这样做会好吗

args = arguments.slice();

我只是想了解使用call

的任何具体原因

还有什么其他情况我们必须使用Array.prototype.slice.call(arguments)

2 个答案:

答案 0 :(得分:12)

arguments类似数组的对象,它不是Array。因此,它没有slice方法。您需要从slice获取Array实施,并将其设置为this上下文设置为arguments。这将返回实际 Array,这是此操作的重点。

答案 1 :(得分:6)

arguments不是数组:

function a(){console.log(typeof(arguments)) }

因此a(123)会产生object

所以我们借用 可以处理像对象这样的数组的方法, slice 对象,就好像它是真正的数组一样。

借用可以通过callapply进行。

apply会将参数作为数组发送(请记住:a array) - 而call会以逗号分隔值发送参数。