Что выведет код 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 ошибок.