Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: this, context, method

Что будет выведено в консоль при вызове метода объекта, если внутри используется this, и почему

Вопрос проверяет понимание того, как определяется this в JavaScript в зависимости от способа вызова функции.

Короткий ответ

this не “лежит” внутри функции навсегда — он определяется в момент вызова. Если функция вызвана как метод объекта (obj.fn()), то this обычно будет указывать на obj. Если вынести метод в переменную и вызвать как обычную функцию (const f = obj.fn; f()), то this потеряется: в strict mode станет undefined, а без strict mode — глобальным объектом (в браузере это window). У стрелочной функции нет своего this, она берет его из внешнего окружения.

Длинный ответ

Определение

this — это контекст вызова функции, который определяется call site (местом/способом вызова), а не местом объявления функции.

Как понять, что будет в this

Обычно достаточно посмотреть на форму вызова:

  1. Вызов как метод: obj.method()

    • this → obj

  2. Обычный вызов функции: fn()

    • this → undefined в strict mode

    • this → глобальный объект без strict mode

  3. Стрелочная функция: () => {}

    • this не меняется при вызове, берется снаружи

Примеры

1) Метод объекта

'use strict';

const user = {
  name: 'Ann',
  show() {
    console.log(this.name);
  },
};

user.show(); // "Ann" (this = user)

2) Потеря контекста при “отрыве” метода

'use strict';

const user = {
  name: 'Ann',
  show() {
    console.log(this);
  },
};

const f = user.show;
f(); // undefined (strict mode)

3) Стрелка внутри метода (берет this снаружи)

'use strict';

const user = {
  name: 'Ann',
  showLater() {
    setTimeout(() => {
      console.log(this.name);
    }, 0);
  },
};

user.showLater(); // "Ann"

Практический смысл

  • Потеря this часто случается, когда:

    1. передаем метод как колбэк (onClick={obj.method})

    2. деструктурируем метод (const { method } = obj)

    3. используем setTimeout(obj.method, 0)

Вывод

this зависит от формы вызова. Чтобы избежать неожиданностей, следи за тем, вызываешь ли ты функцию как obj.method() или как fn(); для колбэков часто используют bind, стрелки или обертку-функцию.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#this

#context

#method

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию