【发布时间】:2015-06-26 12:08:12
【问题描述】:
我有一个函数 myfunc 并想将 bind 它作为一个特定的 this 参数和 bind 的其他参数作为单个数组,而不是参数列表(因为我将参数列表作为参数函数,执行此代码的位置)。
为此,我在bind 上使用apply,如下所示:
var myfunc = function(arg1, arg2){
alert("this = " + this + ", arg1 = " + arg1 + ", arg2 = " + arg2);
}
var bindedMyfunc = myfunc.bind.apply("mythis", ["param1", "param2"]);
bindedMufunc();
这导致Uncaught TypeError: Bind must be called on a function。
我做错了什么?你能详细解释一下,当我运行这段代码时发生了什么,因为现实似乎与我的看法相矛盾?
答案总结:
似乎bind 本身有自己的this 参数,也就是函数,它被调用了。例如。当你说myfunc.bind(args)时,bind的this就是myfunc。
通过在bind 上调用apply,我错误地将bind 的this 分配给了“mythis”,这不是一个函数,并且不能在其上调用bind。
所以,解决方案是使用
myfunc.bind.apply(myfunc, ["mythis"].concat(["param1", "param2"]))
另外,如果你想立即调用绑定的 myfunc,你可以说:
myfunc.apply.bind(myfunc)("mythis", ["param1", "param2"])
但这还不够我的情况,因为我需要将绑定函数作为参数传递给addEventListener。
谢谢你们的帮助,伙计们!
【问题讨论】:
-
第一个解决方案是
myfunc.bind.apply(myfunc, ["mythis", "param1", "param2"])),您忘记了摘要中的数组字面量。
标签: javascript functional-programming function-binding