这个js函数是全局变量的一部分。第一次调用它,从另一个js文件,它的工作原理。但第二次,从一开始,一切都无效。
Start: function () {
console.log('InactivityAlerts.Start() called ...');
if (this.active) {
if (this.IDLE_TIMEOUT != "") {
window.setInterval(this.CheckIdleTime, 1000);
console.log('started...');
}
else {
window.setTimeout(this.Start, 1000);
//an iframe sets the IDLE_TIMEOUT later, but this should continue to
//run until it is not blank.
}
}
},
当它再次召唤自己时;但是,一切都是null,包括 this.active ,它是在此之前从Init设置的。为什么?我怎样才能确保一切仍然正确?
感谢您的帮助
答案 0 :(得分:4)
这是一个this
值问题,请确保在传递函数时绑定正确的this
值。
window.setInterval(this.CheckIdleTime.bind(this), 1000);
window.setTimeout(this.Start.bind(this), 1000);
如果你总是希望它们绑定到同一个实例,你也可以在构造时绑定它们。
function YourConstructor() {
//assumes that someFunction is defined on YourConstructor.prototype
this.someFunction = this.someFunction.bind(this);
}
或者与众所周知的实例相同:
InactivityAlerts = {
Start: function () { /*...*/ }
};
InactivityAlerts.Start = InactivityAlerts.Start.bind(InactivityAlerts);