I've a function myfunc
and want to bind
it to a specific this
argument and other arguments to bind
as a single array, not parameters list (cause I get the parameters list as an argument of function, where this code is executed).
For that purpose I use apply
on bind
as follows:
var myfunc = function(arg1, arg2){
alert("this = " + this + ", arg1 = " + arg1 + ", arg2 = " + arg2);
}
var bindedMyfunc = myfunc.bind.apply("mythis", ["param1", "param2"]);
bindedMufunc();
This results in Uncaught TypeError: Bind must be called on a function
.
What am I doing wrong? Could you explain in detail, what's going onwhen I run this code, cause reality seems to contradict my opinion on that?
Summary of answers:
Seems that bind
itself has its own this
argument, which is the function, it is called on. E.g. when you say myfunc.bind(args)
, bind
's this
is myfunc
.
By calling apply
on bind
I've mistakingly assigned bind
's this to "mythis", which is not a function and bind
can't be called on it.
So, the solution is to use
myfunc.bind.apply(myfunc, ["mythis"].concat(["param1", "param2"]))
Also, if you want to call the binded myfunc right off, you could say:
myfunc.apply.bind(myfunc)("mythis", ["param1", "param2"])
but this doesn't suffice my case, cause I need to pass the binded function as an argument to addEventListener
.
Thanks for your help, guys!