当前位置: 代码迷 >> JavaScript >> 为什么我的setTimeout函数返回“窗口”而不是对象的name属性?
  详细解决方案

为什么我的setTimeout函数返回“窗口”而不是对象的name属性?

热度:93   发布时间:2023-06-06 09:34:40.0
function Person(name) {
this.name = name;
}

Person.prototype.showName = function() {
alert(this.name);
}


var mike = new Person("mike");
mike.showName();  


window.name = "window"; 
setTimeout(mike.showName, 5000);  

什么时候

setTimeout(mike.showName, 5000)

执行后,为什么结果是“窗口”? 谢谢。

保罗,因为setTimeout在窗口范围内运行。 也可以通过window.setTimeout()调用该方法。 因此,当调用mike.showName时,它引用的是窗口对象,而不是您的Person对象。

您可以使用包装函数来解决此问题:

  window.setTimeout(function()
  {
  mike.showName();
  }, 5000);

另请阅读: :

您需要将范围捕获到匿名函数中,否则setTimeout将在窗口范围内运行:

setTimeout(function() { mike.showName() }, 5000);  

setTimeout()执行的代码在与调用它的函数不同的执行上下文中运行。 结果,被调用函数的this关键字将被设置为window(或全局)对象,它将与被称为setTimeout的函数的this值不同。 这个问题在JavaScript参考中有更详细的解释。

使用setTimeout('mike.showName()', 5000); 代替。