Function.prototype.bind.apply()无法按预期工作

Bor*_*kov 4 javascript functional-programming function-binding

我有一个函数,myfunc并希望将bind它作为一个特定的this参数和其他参数bind作为单个数组,而不是参数列表(因为我将参数列表作为函数的参数,执行此代码).为此目的,我使用applybind,如下所示:

var myfunc = function(arg1, arg2){
    alert("this = " + this + ", arg1 = " + arg1 + ", arg2 = " + arg2);
}
var bindedMyfunc = myfunc.bind.apply("mythis", ["param1", "param2"]);
bindedMufunc();
Run Code Online (Sandbox Code Playgroud)

这导致了Uncaught TypeError: Bind must be called on a function.

我究竟做错了什么?你能否详细解释一下,当我运行这段代码时会发生什么,导致现实似乎与我的看法相矛盾?

答案摘要: 似乎它bind本身有自己的this参数,它是函数,它被调用.例如,当你说myfunc.bind(args),bindthismyfunc.

通过调用applybind我已经mistakingly分配bind的这'mythis’,这是不是一个功能,bind不能在叫.

所以,解决方案是使用

myfunc.bind.apply(myfunc, ["mythis"].concat(["param1", "param2"]))
Run Code Online (Sandbox Code Playgroud)

此外,如果你想立即调用绑定的myfunc,你可以说:

myfunc.apply.bind(myfunc)("mythis", ["param1", "param2"])
Run Code Online (Sandbox Code Playgroud)

但这不足以解决我的问题,因为我需要将绑定函数作为参数传递给addEventListener.

谢谢你的帮助,伙计们!

Guf*_*ffa 7

您应该将该函数用作方法的第一个参数apply.使用myfunc.bind不会将函数与调用相关联,它具有效果Function.prototype.bind,您也可以使用它.

bindmethod(thisArg)的第一个参数应该是数组中的第一个项.

var bindedMyfunc = Function.prototype.bind.apply(myfunc, ["mythis", "param1", "param2"]);
Run Code Online (Sandbox Code Playgroud)