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]