Выбор ответа Senior this, call, apply, bind обновлено
new против bind
Вопрос
Что выведет код?
function Box(v) { this.v = v; }
const ctx = { v: 'ctx' };
const BoundBox = Box.bind(ctx);
const b = new BoundBox('new');
console.log(b.v, ctx.v);
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 'new' 'ctx'. new имеет наивысший приоритет: при вызове привязанной функции через new привязанный this игнорируется, создаётся новый объект, и this.v = 'new' записывается в него. ctx не трогается и остаётся 'ctx'.
Варианты ответа
'new' 'new'undefined 'new''new' 'ctx'правильный ответ- TypeError: привязанную функцию нельзя вызвать через new
Разбор
new имеет наивысший приоритет: при вызове привязанной функции через new привязанный this игнорируется, создаётся новый объект, и this.v = 'new' записывается в него. ctx не трогается и остаётся 'ctx'. Вариант 'new' 'new' и undefined 'new' предполагают, что победил bind. Ошибки нет: привязанные функции можно вызывать через new (если исходная функция конструктор).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.