Bor*_*kov 4 javascript functional-programming function-binding
我有一个函数,myfunc并希望将bind它作为一个特定的this参数和其他参数bind作为单个数组,而不是参数列表(因为我将参数列表作为函数的参数,执行此代码).为此目的,我使用apply上bind,如下所示:
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),bind的this是myfunc.
通过调用apply上bind我已经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.
谢谢你的帮助,伙计们!
您应该将该函数用作方法的第一个参数apply.使用myfunc.bind不会将函数与调用相关联,它具有效果Function.prototype.bind,您也可以使用它.
bindmethod(thisArg)的第一个参数应该是数组中的第一个项.
var bindedMyfunc = Function.prototype.bind.apply(myfunc, ["mythis", "param1", "param2"]);
Run Code Online (Sandbox Code Playgroud)