是否可以使用setTimeout
或call
在其他上下文中运行apply
函数?我试过了,但是他们回复了错误说"非法调用"。
var myvar = 10;
function myfun() {
console.log("normal run "+myvar);
}
var myobjvar = {
myvar : 26,
myfun1 : function() {
console.log("context run "+this.myvar1);
}
}
setTimeout(myfun, 1000);
setTimeout.call(myobjvar, myobjvar.myfun1, 1000) // errors out!!

答案 0 :(得分:2)
Function.call
和Function.apply
可让您更改函数内this
关键字的绑定。但是当你使用setTimeout
时,你不需要这样做,因为setTimeout
根本不使用this
- 如果确实如此,你就不应该知道它。< / p>
相反,您想要更改函数本身内this
的含义。您可以使用Function.bind
:
setTimeout( myobjvar.myfun1.bind(myobjvar), 1000);
这与以下任何一个基本相同:
setTimeout( function(){ myobjvar.myfun1() }, 1000);
setTimeout( function(){ myobjvar.myfun1.call(myobjvar) }, 1000);
答案 1 :(得分:1)