打字稿`this`不是我的预期

时间:2018-02-01 15:40:56

标签: javascript typescript this

我对javascript / typescript很新。我有这个代码,我想在事件处理程序中调用一个类函数。问题是this不是我的预期。

class MyClass {

  private textInput: TextView;
  private _presenter: DateOptionPresenter;

  constructor(properties: { presenter: DateOptionPresenter } & CompositeProperties) {
    super(properties);
    this._presenter = properties.presenter;
    this.createUI();
  }

  private createUI() {
    this.append(
      this.textInput = new TextView({
        left: 5, right: 5, top: 5, bottom: 5
      }).on({tap: this.showDateDialog})
    );
  }

  private showDateDialog() {
    let selectedDate = new Date();
    new DateDialog({
      date: selectedDate
    }).on('select', (date) => this._presenter.fill(date))
    .open();
  }
}

所以,在最后一个函数showDateDialog()中,当我调用this时,它在TextView上下文而不是MyClass中,并且this._presenter未定义。

如何在那里访问_presenter?

1 个答案:

答案 0 :(得分:0)

只是传递this.showDateDialog将丢失函数绑定的上下文。您需要显式绑定上下文并返回该上下文,或者只是在另一个函数内调用它。

.on({tap: () => this.showDateDialog()})