Показать сообщение отдельно
  #5 (permalink)  
Старый 27.11.2019, 22:55
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Потому что для стрелочной функции this - это конкретно this контекста объявления оной, а для нормальной функции this зависит от условий вызова.
Можно конечно использовать стрелочные функции, но именно для вашего случая и придумали передачу объекта:
class MyClass {
  constructor(x) {
    this.x = x;
  }

  onKeyDown(event) {          
    console.log(this);      
  }

  onKeyUp(event) {          
    console.log(this);     
  }

  handleEvent(event) {
    switch(event.type) {
      case 'keydown':
        return this.onKeyDown(event);
      case 'keyup':
        return this.onKeyUp(event);
        // ...
    }
  }

  start() {
    document.addEventListener('keydown', this);
    document.addEventListener('keyup', this);
  }
}

window.addEventListener('load', function() {
  let c = new MyClass(5);
  c.start();
});
__________________
29375, 35
Ответить с цитированием