为什么我的setTimeout函数返回"window"而不是我的对象的name属性?

jsn*_*man 1 javascript

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);  
Run Code Online (Sandbox Code Playgroud)

什么时候

setTimeout(mike.showName, 5000)
Run Code Online (Sandbox Code Playgroud)

执行,为什么结果"窗口"?谢谢.

Chr*_*tof 5

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

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

  window.setTimeout(function()
  {
  mike.showName();
  }, 5000);
Run Code Online (Sandbox Code Playgroud)

另请阅读:http://www.quirksmode.org/js/this.html