Значение this при вызове методов объекта

obj.a() выведет объект obj, а obj.b() — undefined. Внутри funcB обычный вызов funcA() не передаёт контекст внешнего метода, а строгий режим не подставляет глобальный объект.

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

Что ответить на собеседовании

obj.a() выведет объект obj, а obj.b() — undefined. Внутри funcB обычный вызов funcA() не передаёт контекст внешнего метода, а строгий режим не подставляет глобальный объект.

Подробный разбор

Ответ с пояснениями

Условие

Нужно предсказать, что появится в консоли после вызовов obj.a() и obj.b() в строгом режиме ("use strict") и дать объяснение того, как формируется контекст this.

"use strict";
// рассуждение вслух более ценно чем верный ответ

function funcA() {
  console.log(this);
}

function funcB() {
  funcA();
}

const obj = {
  a: funcA,
  b: funcB,
};

obj.a();
obj.b();

Ответ

obj.a() выведет объект obj, а obj.b() — undefined. Внутри funcB обычный вызов funcA() не передаёт контекст внешнего метода, а строгий режим не подставляет глобальный объект.

При obj.a() функция funcA вызывается непосредственно как метод obj. При obj.b() объект действительно становится this внутри funcB, но эта функция вызывает funcA без получателя. Каждый обычный вызов определяет свой this независимо. Чтобы второй вывод тоже был obj, нужно вызвать funcA.call(this) внутри funcB; одной вложенности вызовов недостаточно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее