Понять функцию стрелки на основе события

#javascript #events #dom-events #keypress #arrow-functions

Вопрос:

У меня есть следующие коды:

 class Autocomplete {
  constructor(ele, options) {
    this.ele = ele;
    this.options = options;
    this.input = this.ele.querySelector('.input');
    // with keyup we want to fire it right away
    // this.input.addEventListener('keyup', (e) => this.display(e);
  }
}
 

Затем display функция отобразит вводимые пользователем данные на странице. Однако мне интересно, в чем разница между этими 3 функциями:

1)

 this.input.addEventListener('keyup', (e) => this.display(e));
 
 this.input.addEventListener('keyup', this.display);
 
 this.input.addEventListener('keyup', () => this.display());
 

Работают только функции 1 и 2, и, насколько я понимаю, функция 1 будет помещена e в качестве аргумента в display функцию, тогда как функция 2 будет выполняться немедленно keyup . Однако для 3, почему это не работает, потому что я думал e , что аргумент передается неявно API DOM?

Из первых 2 функций какая из них более эффективна и почему?

Ответ №1:

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

Комментарии:

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

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

3. Взгляните на эту статью betterprogramming.pub/…