Что такое this?
Объекты и прототипы
`this` — это ссылка на объект контекста выполнения функции. Её значение определяется не там, где функция объявлена, а тем, как она вызвана.
Правила определения this
- Обычный вызов —
this=undefinedв strict mode (илиglobalThisв нестрогом). - Метод объекта —
this= объект слева от точки. - Конструктор (`new`) —
this= новый создаваемый объект. - Явная привязка —
call/apply/bindзадаютthisвручную. - Стрелочная функция — своего
thisнет, берётся из внешнего лексического окружения.
const user = {
name: 'Ann',
greet() {
return `Привет, ${this.name}`;
},
};
user.greet(); // 'Привет, Ann' — this = user
const greet = user.greet;
greet(); // this потерян (undefined в strict)Потеря контекста
Частая проблема — передать метод как колбэк:
setTimeout(user.greet, 100); // this потерян
setTimeout(() => user.greet(), 100); // ок
setTimeout(user.greet.bind(user), 100); // окСтрелки против обычных функций
Стрелочная функция не имеет своего this, поэтому её нельзя «отвязать» — это удобно для колбэков и обработчиков внутри методов/классов.
Коротко для собеседования
this зависит от способа вызова: метод → объект, new → новый объект, call/apply/bind → заданный, стрелка → внешний this. При потере контекста используют bind или стрелку.
Подробнее: learn.javascript.ru — this