@ssumatokhin

Функция стрелка на событие, как назначить this?

Есть две функции, в первой все работает
fullText.onclick = function () {
  this.classList.add('_active');
}


Но во втором варианте естественно не работает, потому что в функции стрелки нет this, но если я хочу использовать функцию стрелку, как назначить в ней this и что бы она заработала как обычная анонимная функция.
fullText.onclick = () => {
  this.classList.add('_active');
}
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
@lemme
Frontend
Ибо стрелочная функция биндит контекст в том месте, где была создана, в твоем случае context == window.

А в этом случае, стрелочная функция была создана в контексте объекта Obj
var Obj = {
  init() {
  	 document.body.onclick = () => {
     	console.log(this);
     };
  }
}


Испольюзуй

fullText.onclick = e => {
  e.target.classList.add('_active');
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Dark_Scorpion
@Dark_Scorpion
Стрелочные функции предназначены для упрощенной работы с контекстом. Если его по сути нет (вызывается не в функции или калбеки) использовать её не стоит. Или посмотреть код на предмет рефакторинга.
Если уж сильно надо, можно такой вариант:
function fullTextOnClick (context) {
  context.classList.add('_active');
}

Но я считаю этот код, плохим стилем в js.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы