当我没有在回调中绑定“this”时,为什么我会丢失 setTimeout 的上下文。
在下面的代码中,您可以看到 onTime 在 3 个地方被调用。
一次从班里出来。哪个工作正常。
一次从课外。哪个工作正常。
当计时器触发呼叫时。“this”需要绑定方法。
有没有办法在每次回调中不使用绑定来强制上下文?
var MyBaseClass = function () {
"use strict";
this._base = {};
this._base.baseFunc = function () {
console.log('baseFunc called')
};
return this._base;
};
var TestClass = function () {
"use strict";
if (TestClass.prototype._singletonInstance) {
return TestClass.prototype._singletonInstance;
}
TestClass.prototype._singletonInstance = this;
this._timer = {};
console.log('constructor')
};
TestClass.prototype = new MyBaseClass(); // Set prototype to MyBaseClass
TestClass.prototype.constructor = TestClass; // Set constructor back to TestClass
TestClass.prototype.onTime = function () {
"use strict";
console.log('ontime called')
console.log(this, "<--- why do i lose context")
this.baseFunc()
}
TestClass.prototype.init = function () {
"use strict";
console.log('local')
this.onTime()
//this._timer = setTimeout(this.onTime.bind(this),500)// works
this._timer = setTimeout(this.onTime, 500) // no work
};
var asdf = new TestClass()
asdf.init()
console.log('global')
asdf.onTime()