Function.bind は、呼び出されると、バインドされたコンテキストで元の関数を常に呼び出す新しい関数を返します。
次のように Function.bind を実装できます。
Function.prototype.bind = function(context) {
var origFunction = this;
return function() {
return origFunction.apply(context, arguments);
};
};
ここでこれを試すことができます: http://jsfiddle.net/HeRU6/
したがって、 を実行するsomefunction.bind("foo")
と、新しい関数が返されます。この新しい関数を呼び出すsomefunction
と"foo"
、常にコンテキストとして呼び出されます。
コンテキストではなく、引数のみをバインドする関数を作成できます。
Function.prototype.curry = function() {
var origFunction = this, args = Array.prototype.slice.call(arguments);
return function() {
console.log(args, arguments);
return origFunction.apply(this, Array.prototype.concat.apply(args, arguments));
};
};
a = function() { console.log(this, arguments); };
b = a.curry(1, 2);
b(); // Window [1, 2]
b(3); // Window [1, 2, 3]
b.call("foo", 4); // "foo" [1, 2, 4]