我有一个我试图用来管理客户端会话的类,它看起来像这样:
var sessionmanager;
sessionmanager = (function() {
sessionmanager.name = 'sessionmanager';
function sessionmanager(timeout, action) {
if (action != null) {
this.action = action;
} else {
this.action = null;
}
if (timeout != null) {
this.timeout = timeout * 60;
} else {
this.timeout = 0;
}
}
sessionmanager.prototype.run = function() {
return window.setInterval(this.tick, 1000);
};
sessionmanager.prototype.sessionExpired = function() {
if (this.action != null) {
window.navigate("timeout.asp");
}
};
sessionmanager.prototype.setTimeout = function(timeout) {
return this.timeout = timeout;
};
sessionmanager.prototype.tick = function() {
this.timeout -= 1;
if (this.timeout < 1) {
return sessionExpired();
}
};
return sessionmanager;
})();
Run Code Online (Sandbox Code Playgroud)
但是,当我调试tick从setInterval回调中调用的函数内部时,我得到了this.timeout = NaN
我猜我错误的做了什么?请帮忙?我是javascript的新手......
如果setInterval调用该函数,它不会this像您期望的那样设置值.调用this.tick() 确实设置正确,但只是传递函数并以另一种方式调用它不会.您必须将this值绑定到您想要的值:
setInterval(this.tick.bind(this), 1000);
Run Code Online (Sandbox Code Playgroud)
这适用于较新的浏览器,但有可用的垫片.
此外,您可能意味着this.sessionExpired(),因为它是定义的地方.return没有多大意义,因为setInterval不关心回报价值.
| 归档时间: |
|
| 查看次数: |
996 次 |
| 最近记录: |