把window.setTimeout赋值给自定义对象,使用时会报错

var obj = {};
obj.setTimeout = window.setTimeout;

obj.setTimeout(function(){
    console.log("111")
},100);

//Uncaught TypeError: Illegal invocation at <anonymous>:5:5

window下的一些方法,赋值给自定义对象会报错,想知道具体原因。

阅读 2.9k
3 个回答

估计是 this 的问题

使用这个试试

obj.setTimeout = window.setTimeout.bind(window)

图片描述

var obj = {};
obj.setTimeouts = window.setTimeout;
console.log(obj.setTimeout === window.setTimeout)
obj.setTimeouts(function(){
    console.log("111");
}.call(window),100);
var obj = {};

obj.timeout = function(fn,time) {
    window.setTimeout(fn.bind(this),time)
}

obj.timeout(() => {
    console.log("666");
},100)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题