If I want to partially apply a function I can use bind
, but it seems I have to affect the receiver of the function (the first argument to bind
). Is this correct?
I want to perform partial application using bind
without affecting the receiver.
myFunction.bind(iDontWantThis, arg1); // I dont want to affect the receiver
partial application using
bind
without affecting the receiver
That's not possible. bind
was explicitly designed to partially apply the "zeroth argument" - the this
value, and optionally more arguments. If you only want to fix the first (and potentially more) parameters of your function, but leave this
unbound, you'll need to use a different function:
Function.prototype.partial = function() {
if (arguments.length == 0)
return this;
var fn = this,
args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(Array.prototype.slice.call(arguments)));
};
};
Of course, such a function is also available in many libraries, eg Underscore , Lodash , Ramda etc. There is no native equivalent however.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.