Определение контекста this в методах объекта

obj.diameter() вернёт 20. Стрелка perimeter не получает this от obj: в браузерном script без глобального r результат NaN, а в ES-модуле возможен TypeError из-за undefined this.

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

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

obj.diameter() вернёт 20. Стрелка perimeter не получает this от obj: в браузерном script без глобального r результат NaN, а в ES-модуле возможен TypeError из-за undefined this.

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

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

Условие

Какой результат будет получен при вызове указанных функций?

const obj = {
  r: 10,
  diameter() {
    return this.r * 2;
  },
  perimeter: () => 2 * Math.PI * this.r,
};

obj.diameter();
obj.perimeter();

Ответ

obj.diameter() вернёт 20. Стрелка perimeter не получает this от obj: в браузерном script без глобального r результат NaN, а в ES-модуле возможен TypeError из-за undefined this.

Обычный метод diameter использует объект слева от точки. Стрелка perimeter захватывает this окружающей области при создании и игнорирует способ вызова. Исправление — perimeter() { return 2 * Math.PI * this.r; }; тогда результат равен 20π. В исходном фрагменте console.log нет, поэтому успешные возвращённые значения сами по себе не печатаются.

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

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

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

Подробнее