PassFront
  1. PassFront
  2. База знаний
  3. Объекты и прототипы

Что такое this?

Объекты и прототипы

`this` — это ссылка на объект контекста выполнения функции. Её значение определяется не там, где функция объявлена, а тем, как она вызвана.

Правила определения this

  1. Обычный вызов — this = undefined в strict mode (или globalThis в нестрогом).
  2. Метод объекта — this = объект слева от точки.
  3. Конструктор (`new`) — this = новый создаваемый объект.
  4. Явная привязка — call / apply / bind задают this вручную.
  5. Стрелочная функция — своего 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

Другие вопросы раздела