Javascript 如何从回调中引用类的属性
鉴于以下类别:Javascript 如何从回调中引用类的属性,javascript,Javascript,鉴于以下类别: class TimerFunk { constructor(someObject){ this.a = 1 this.someObject = someObject } funk(){ console.log(this.a) if(this.a > 2){ return } this.a++ this.someObj
class TimerFunk {
constructor(someObject){
this.a = 1
this.someObject = someObject
}
funk(){
console.log(this.a)
if(this.a > 2){
return
}
this.a++
this.someObject.execCallback(this.funk)
}
}
执行以下命令时:
t = new TimerFunk({execCallback:function(callback){callback()}})
t.funk()
打算将属性TimerFunk.a
记录到控制台,直到this.a>2
。但是,循环只执行一次:
VM2097:9 1
VM2097:9 Uncaught TypeError: Cannot read property 'a' of undefined
at funk (<anonymous>:9:25)
at Object.execCallback (<anonymous>:5:13)
at TimerFunk.funk (<anonymous>:13:25)
at <anonymous>:1:3
VM2097:9 1
VM2097:9未捕获类型错误:无法读取未定义的属性“a”
在芬克(9:25)
在Object.execCallback(:5:13)
在TimerFunk.funk(:13:25)
时间:1:3
通过调试,我发现这是因为在第一个循环中,this表示对象t
,而在第二个循环中,this表示对象someObject
是否有任何方法可以修复此问题并允许我从执行的回调中访问类属性?调用回调时,不会将
TimerFunk
实例t
作为此
对象:
function(callback){callback()}}
解决方案是将回调的这个
对象绑定到TimerFunk
实例:
funk() {
...
this.someObject.execCallback(this.funk.bind(this));
}
或者,您可以通过回调显式传递t
作为此
对象。调用(t)
:
直觉上我会假设this.funk.bind(this)不会返回funk。很高兴这个功能存在,虽然我希望尽可能避免将t作为参数传递!谢谢
t = new TimerFunk({execCallback:function(callback){callback.call(t)}});