为什么我们不能在setTimeout上调用和应用?

时间:2016-01-30 14:01:09

标签: javascript call settimeout apply

为什么我们不能在setTimeout上调用和应用

var obj={}
window.setTimeout.call(obj,callback,delay);//it throws error stating illegal invocation 

2 个答案:

答案 0 :(得分:1)

来自WHATWG setTimeout documentation

  

setTimeout()方法必须返回定时器初始化步骤返回的值,并传递方法的参数,运行算法的方法实现的对象(Window或WorkerGlobalScope对象)as方法上下文,并将repeat标志设置为false。

需要从setTimeout对象的上下文中调用

window。传递给.call方法的上下文不是窗口对象。要正确调用setTimeout,请执行以下操作:

setTimeout.call(window, callback, delay);

答案 1 :(得分:1)

在setTimeout上使用.call没有任何意义,因为.call用于在调用函数时调用函数并为该函数提供上下文。换句话说,您不会尝试使用提供给它的上下文来调用setTimeout,而是尝试使用提供给它的上下文来调用回调。

要使用setTimeout完成此操作,您可以使用.bind,如:

 var obj={};
 window.setTimeout(callback.bind(obj),delay);