在这篇文章中,John Resig 讨论了这个用于柯里化的片段:
Function.prototype.curry = function() {
var fn = this, args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(
Array.prototype.slice.call(arguments)));
};
};
我对表达感到困惑Array.prototype.slice.call(arguments)
。
这里的“参数”是 Array 的 slice() 方法的“this”参数,但“slice()”本身需要一个参数,所以我认为你需要做类似
Array.prototype.slice.call(arguments, <someIndex>)
. 我不明白该代码如何按原样工作。根据"arguments" 的文档,"arguments" 实际上不是一个数组,而只是一个类似对象的数组。我们如何在上面调用“slice()”?如果我输入代码,
console.log(arguments.slice())
我会收到一条错误消息,指出该对象没有切片方法。
这里发生了什么?