Результаты: Анна, Ира и Оля. Обычный вызов берёт получателя слева от точки, call задаёт его сразу, а bind создаёт новую привязанную функцию.
Как разные вызовы getName меняют получателя
Результаты: Анна, Ира и Оля. Обычный вызов берёт получателя слева от точки, 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, поэтому данный пример предполагает обычный метод.