Ответ
В JavaScript this может вызывать проблемы из-за динамического контекста:
- Потеря контекста в колбэках:
const obj = {
name: 'Test',
logName() {
console.log(this.name);
}
};
setTimeout(obj.logName, 100); // undefined
- Разный контекст в строгом (
'use strict') и нестрогом режиме:
- В нестрогом режиме
thisв функции без контекста =window - В строгом режиме =
undefined
- Методы как пропсы в React могут терять контекст:
<button onClick={this.handleClick}>Click</button> // без bind потеряет this
- Стрелочные функции не имеют своего
this, берут из внешнего контекста, что может быть неожиданным.
Решения:
- Использовать
bind() - Стрелочные функции
- Сохранение контекста в переменную (
const self = this)