关于javascript:对部分应用程序使用绑定,而不会影响接收器

Using bind for partial application without affecting the receiver

如果要部分应用某个函数,可以使用bind,但似乎必须影响该函数的接收者(bind的第一个参数)。 这样对吗?

我想使用bind执行部分应用程序而不影响接收器。

1
myFunction.bind(iDontWantThis, arg1); // I dont want to affect the receiver


partial application using bind without affecting the receiver

那不可能 bind被显式设计为部分应用"第零个参数"-this值,以及可选的其他参数。 如果只想修复函数的第一个(可能还有更多)参数,但不绑定this,则需要使用其他函数:

1
2
3
4
5
6
7
8
9
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)));
    };
};

当然,这种功能在许多库中也是可用的,例如。 下划线,Lodash,Ramda等。但是没有本地等效项。