为什么我们不能在setTimeout上调用和应用
var obj={}
window.setTimeout.call(obj,callback,delay);//it throws error stating illegal invocation
答案 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);