Вебсправочник
Справочник JavaScript

this: контекст обычного вызова метода

Значение this у обычной функции зависит от способа вызова, а не просто от места её объявления.

Назначение

Значение this у обычной функции зависит от способа вызова, а не просто от места её объявления.

Как это работает

Вызов object.method() обычно передаёт object как this. Если извлечь функцию в переменную, связь с объектом сама по себе не сохраняется. В строгом режиме простой вызов имеет this равным undefined.

Пример

'use strict';
function current(){return this;}
const holder={current};
console.assert(holder.current()===holder);
const detached=holder.current;
console.assert(detached()===undefined);
console.assert(detached.call(holder)===holder);

Что должно получиться

Один и тот же код получает разные значения this в зависимости от формы вызова. Строгий режим в примере делает отсутствие контекста явно наблюдаемым.

Граница применения и частая ошибка

Не передавайте метод как callback, ожидая автоматического сохранения владельца. Используйте обёртку или bind, если функция действительно зависит от this.

Самостоятельная проверка

Прочитайте this при вызове через объект и при отдельном вызове той же функции в строгом режиме. Затем восстановите контекст через call.

JavaScript в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.