Контекст связывания TypeScript - PullRequest
0 голосов
/ 19 июня 2019

У меня есть класс, содержащий функции private receiveCheck и protected dispatch.Я также хочу вызвать приватную функцию в обратном вызове, который я пытался связать с this.

protected dispatch(ajaxParams: JQuery.AjaxSettings<any>): void {
    ajaxParams.success = ((a: any, b: any) => {
        console.log(this)
        this.receiveCheck(0)
    }).bind(this)

    $.ajax(ajaxParams);
}

К сожалению, когда выполняется анонимная функция, она выдает следующую ошибку:

Uncaught TypeError: _this.receiveCheck не является функцией

EDIT: Журнал в выходных данных является объектом Window.Удаление вызова bind не решает эту проблему.

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Как вы запускаете метод dispatch?Используйте метод стрелки, чтобы не потерять это

    public dispatch = (): void =>  {
      // ...
    }
0 голосов
/ 19 июня 2019

Вы используете функцию arraow, поэтому контекст this в любом случае связан с верхней функцией. Вы можете просто удалить привязку

class Example {
  public do() {
    console.log('doPublic');
    const fn = () => {
      this.doProtected();
    };
    fn();
  }

  protected doProtected() {
    console.log('doProtected');
  }
}

const e = new Example();
console.log('start');
e.do();

https://codepen.io/ste-xx/pen/qzaeRx?editors=1111

...