使用bind进行部分应用而不影响接收器

时间:2015-02-26 14:16:10

标签: javascript partial-application function-binding

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

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

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

1 个答案:

答案 0 :(得分:1)

  

使用bind进行部分应用而不影响接收器

那是不可能的。 bind明确设计为部分应用“第0个参数” - 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)));
    };
};

当然,在许多库中也可以使用这样的功能,例如UnderscoreLodashRamda等。但是,没有原生的等价物。