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)
执行,为什么结果是“窗口”?感谢。
答案 0 :(得分:5)
保罗 因为setTimeout在窗口范围内运行。该方法也可以通过window.setTimeout()调用。因此,当调用mike.showName时,这将引用窗口对象,而不是Person对象。
您可以使用包装函数来解决此问题:
window.setTimeout(function()
{
mike.showName();
}, 5000);
答案 1 :(得分:1)
您需要将范围捕获到匿名函数中,或者setTimeout将在窗口范围内运行:
setTimeout(function() { mike.showName() }, 5000);
答案 2 :(得分:1)
setTimeout()
执行的代码在一个单独的执行上下文中运行,该函数从中调用它。因此,被调用函数的this关键字将被设置为窗口(或全局)对象,它将与调用setTimeout的函数的this值不同。 JavaScript参考中更详细地解释了此问题。
改为使用setTimeout('mike.showName()', 5000);
。