Что вернут diameter и стрелочный perimeter у shape?

Diameter вернёт 20, perimeter — 4π. Обычный метод читает radius объекта shape, а стрелка захватывает this вызова makeShape, где radius равен 2.

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

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

Diameter вернёт 20, perimeter — 4π. Обычный метод читает radius объекта shape, а стрелка захватывает this вызова makeShape, где radius равен 2.

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

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

Условие

В строгом режиме выполните:

'use strict';
function makeShape() {
  return {radius: 10,
    diameter() { return this.radius * 2; },
    perimeter: () => 2 * Math.PI * this.radius
  };
}
const shape = makeShape.call({radius: 2});
console.log(shape.diameter());
console.log(shape.perimeter());

Ответ

Diameter вернёт 20, perimeter — 4π. Обычный метод читает radius объекта shape, а стрелка захватывает this вызова makeShape, где radius равен 2.

Strict mode не заставляет стрелку брать this из объекта литерала. При создании она использует лексическое окружение фабрики, вызванной с явным получателем. Чтобы perimeter относился к самому shape, его нужно объявить обычным методом: perimeter() { return 2 * Math.PI * this.radius; }. Тогда оба расчёта будут использовать один radius.

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

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

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

Подробнее