В Typescript может ли метод экземпляра объекта, когда он используется map (), получить доступ к свойствам этого объекта? - PullRequest
0 голосов
/ 15 января 2019

У меня есть класс, в котором есть метод, который я хочу использовать с помощью функции array.map () Typescript. Я создал объект из этого класса и использую метод из этого объекта. Должен ли этот метод при использовании в map () иметь доступ к свойствам этого экземпляра объекта? Из моего тестирования кажется, что это не так.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

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

class MyClass {
  multiplyer = 2;

  x = [1,2,3].map(this.double);

  doubleArrow = val => this.multiplyer * val; // this is always what you expect it to be, the instance of this object

  y = [1,2,3].map(this.doubleArrow);

  double(val) {
    return this.multiplyer * val; // this will change depending on the function that calls it
  }
}
0 голосов
/ 16 января 2019

Судя по моим испытаниям, это не так.

Общая ошибка плохая this.Пример, который не удастся:

class Foo {
  x = 123
  returnX() { return this.x; } 
}
const fail = [new Foo()].map(foo.returnX);

Исправить

Использовать функцию стрелки:

class Foo {
  x = 123
  returnX = () => { return this.x; } 
}
const pass = [new Foo()].map(foo.returnX);

Еще

...