回调函数将不会调用其类的其他成员函数

时间:2019-01-08 11:17:19

标签: angular typescript

我的回调函数将不会调用同一类实例的另一个成员函数

使用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
    }
  }) 
} 

1 个答案:

答案 0 :(得分:4)

这是一个上下文问题。

通过写作

 this.sub.myCallback = this.myCallback;

您更改了调用方的上下文:this关键字现在引用了其他内容,在这种情况下,它是sub变量。

使用bind将正确的上下文绑定到您的元素:

this.sub.myCallback = this.myCallback.bind(this)