Вопрос проверяет понимание того, как определяется this и почему он зависит от способа вызова функции.
Контекст this определяется в момент вызова функции, а не её объявления. При присваивании метода переменной теряется связь с объектом. В результате функция вызывается как обычная, без контекста. Это приводит к undefined или глобальному объекту. Такое поведение — часть спецификации JavaScript.
Потеря this — одна из самых частых проблем в JavaScript, особенно при работе с методами объектов.
Значение this зависит от формы вызова:
Метод объектаthis указывает на объект слева от точки.
Обычный вызов функцииthis равен undefined в строгом режиме.
Когда метод присваивается переменной:
const user = {
name: 'Alex',
getName() {
return this.name
}
}
const fn = user.getName
fn()
Происходит следующее:
метод извлекается из объекта
связь с user теряется
вызов становится обычным
JavaScript не привязывает this к функции навсегда.
Контекст определяется исключительно способом вызова.
использовать bind
вызывать метод через объект
использовать стрелочные функции в качестве колбэков
Контекст this теряется при присваивании метода переменной, потому что функция вызывается без объекта-владельца. Это фундаментальное правило языка.