在不影响接收者的情况下使用绑定进行部分应用

Using bind for partial application without affecting the receiver

如果我想部分应用一个函数,我可以使用 bind,但似乎我必须影响函数的接收者(bind 的第一个参数)。这是正确的吗?

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

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

partial application using bind without affecting the receiver

这不可能。 bind 明确设计为部分应用 "zeroth argument" - this 值,以及可选的更多参数。如果您只想修复函数的第一个(可能还有更多)参数,但不绑定 this,则需要使用不同的函数:

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)));
    };
};

当然很多库也有这样的功能,比如Underscore, Lodash, Ramda 等。但是没有本地等效项。