obj.diameter() вернёт 20. Стрелка perimeter не получает this от obj: в браузерном script без глобального r результат NaN, а в ES-модуле возможен TypeError из-за undefined this.
Определение контекста 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 нет, поэтому успешные возвращённые значения сами по себе не печатаются.