Что выведет код Middle this, call, apply, bind обновлено

Привязанная функция как метод

Вопрос

Что выведет код? По строке на каждый вывод.

function who() { return this.name; }
const a = { name: 'a' };
const b = { name: 'b' };
const bound = who.bind(a);
console.log(bound.call(b));
console.log(bound.bind(b)());
const obj = { name: 'obj', who: bound };
console.log(obj.who());
console.log(who.call(b));

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: a, a, a, b. Привязанная функция всегда вызывает who с объектом a, что бы ни было снаружи: call(b), повторный bind(b) и вызов как метод obj.who() не помогают, все три раза a.

Что выведет

a
a
a
b

Разбор

Привязанная функция всегда вызывает who с объектом a, что бы ни было снаружи: call(b), повторный bind(b) и вызов как метод obj.who() не помогают, все три раза a. Исходная функция who при этом не изменилась, и who.call(b) даёт b.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.