我的回调函数将不会调用同一类实例的另一个成员函数
使用angular的打字稿,我有一个定义公共成员函数myCallback()
的类,该函数作为回调函数传递给ngrx存储订阅,并被异步调用。 myCallback()
函数尝试调用其相同类实例的另一个成员函数this.funcA()
,但这会失败,并出现以下错误:未定义funcA()
。
myCallback()
可以调用其同一类实例的成员属性this.prop
,并且可以调用不是同一类的成员的函数,例如funcB()
。
我怀疑这与this
上下文更改有关。但是我可以使用this
成功调用属性,但不能调用??
这是怎么回事,我不明白吗?
export class MyClass implements OnInit
{
public prop:boolean;
private sub:Subscriber;
constructor(public storeY:Store<fromY.FeatureState>){}
ngOnInit(){
this.sub = new Subscriber(this.storeY);
this.sub.myCallback = this.myCallback;
this.sub.subscribe();
}
public myCallback()
{
this.prop=true; //works
this.funcA(); //does not work, funcA not defined
funcB(); //works
}
public funcA()
{}
} //end class
funcB(){}
缩写的订户类别
export class Subscriber {
public myCallback: () => void;
constructor(public storeY:Store<fromY.FeatureState>)
{ }
public subscribe() //called in external ngOnInit
{
this.storeY.select(state => state.myData)
.pipe()
.subscribe((data:object) =>{
this.myCallback(); //calling callback
}
})
}
答案 0 :(得分:4)
这是一个上下文问题。
通过写作
this.sub.myCallback = this.myCallback;
您更改了调用方的上下文:this
关键字现在引用了其他内容,在这种情况下,它是sub
变量。
使用bind
将正确的上下文绑定到您的元素:
this.sub.myCallback = this.myCallback.bind(this)