Javascript超时问题
Javascript Timeout Issue
我有这个Javascript类:
function PageManager () {
this.timeoutHandler = function () {
alert ("hello");
}
this.startTimeout = function () {
this.timeout = setTimeout ("this.timeoutHandler()", 1000);
}
}
当我调用obj.startTimeout ();
时,我得到了这个错误:
this.timeoutHandler is not a function
如何在超时时调用类函数?
如果将字符串传递给setTimeout
,则代码将在全局范围内求值。始终传递函数引用:
this.startTimeout = function () {
var self = this;
this.timeout = setTimeout(function() {
self.timeoutHandler();
}, 1000);
}
或者,如果你不需要引用timeoutHandler
中的对象,那么你可以直接传递函数:
this.timeout = setTimeout(this.timeoutHandler, 1000);
问题是您正在向setTimeout
传递一个字符串。此字符串为eval
'd,具有窗口的作用域。所以,如果你要这样做:
this.timeout = setTimeout ("console.log(this);", 1000);
安装Firebug后,您会看到this
就是window
,当然它没有timeoutHandler
方法。
这就是为什么永远不应该向setTimeout
传递字符串的原因。给它一个函数引用。
function PageManager () {
this.timeoutHandler = function () {
alert ("hello");
console.log(this);
}
this.startTimeout = function () {
this.timeout = setTimeout (this.timeoutHandler, 1000);
}
}
obj = new PageManager ();
obj.startTimeout();
当您执行此代码时,您将拥有所期望的范围。
相关文章:
- iOS Safari Javascript设置超时问题
- Selebyun爬网程序超时问题C#
- 是否从超时内开始间隔是一个问题
- 设置超时功能在 chrome 扩展程序弹出窗口.js问题
- 清除超时的问题
- 加载资源时出现 OpenTok JS 连接超时问题
- 设置超时问题
- 线程休眠和设置超时问题
- 超时时单击动态标签时出现问题
- 正在获取ice候选项收集的超时问题
- 超时和滚动问题
- 会话超时问题
- 在For循环上设置超时/延迟的问题
- 下拉菜单超时问题
- 会话超时有问题
- JQuery超时问题与mouseout函数
- 这个清除超时有什么问题?
- setTimeout问题,则没有超时
- 多个javascript超时-实时数据获取的问题
- 循环延迟超时问题