我有一個類,我試圖用來管理客戶端的會話,它看起來像這樣:的Javascript setInterval的範圍界定問題
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;
})();
然而,當我調試tick
函數內部是從內部被稱爲setInterval
回調我得到this.timeout = NaN
我猜我的作用域不正確?請幫助?我是JavaScript新手...
你也可以使用「那個」技巧: 'var that = this;返回setInterval(函數(){返回that.tick()},1000)' – hugomg
我最終使用'那個'解決方案,因爲我需要支持更舊的瀏覽器(詛咒你的asp!),但我很感激幫助! – FlyingStreudel
@missingno:對。這裏只是修復'this'值,所以我認爲'.bind'是一個很好的解決方案。 – pimvdb