この記事では、ジョン・レシグがカリー化のためのこのスニペットについて説明しています。
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)
。
ここで、「arguments」は配列のslice()メソッドに対する「this」引数ですが、「slice()」には引数自体が必要なので、のようなことをする必要があると思います
Array.prototype.slice.call(arguments, <someIndex>)
。そのコードがどのように機能するのかわかりません。「arguments」に関するドキュメントによると、「arguments」は実際には配列ではなく、オブジェクトのような配列にすぎません。その上で「slice()」をどのように呼び出していますか?また、コード
console.log(arguments.slice())
を入力すると、オブジェクトにスライスメソッドがないというエラーが表示されます。
何が起きてる?