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