Как разные вызовы getName меняют получателя

Результаты: Анна, Ира и Оля. Обычный вызов берёт получателя слева от точки, call задаёт его сразу, а bind создаёт новую привязанную функцию.

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

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

Результаты: Анна, Ира и Оля. Обычный вызов берёт получателя слева от точки, call задаёт его сразу, а bind создаёт новую привязанную функцию.

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

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

Условие

Дан const user = {name: 'Анна', getName(){ return this.name; }}. Сравните user.getName(), user.getName.call({name:'Ира'}) и user.getName.bind({name:'Оля'})().

Ответ

Результаты: Анна, Ира и Оля. Обычный вызов берёт получателя слева от точки, call задаёт его сразу, а bind создаёт новую привязанную функцию.

Bind сам по себе не вызывает getName; последние скобки в третьем выражении запускают возвращённую функцию. Привязка не копирует объект: последующее изменение его name будет видно методу. Для стрелочной функции эти способы не меняют лексический this, поэтому данный пример предполагает обычный метод.

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

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

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

Подробнее