Выбор ответа 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'.

Варианты ответа

  1. 'new' 'new'
  2. undefined 'new'
  3. 'new' 'ctx'правильный ответ
  4. TypeError: привязанную функцию нельзя вызвать через new

Разбор

new имеет наивысший приоритет: при вызове привязанной функции через new привязанный this игнорируется, создаётся новый объект, и this.v = 'new' записывается в него. ctx не трогается и остаётся 'ctx'. Вариант 'new' 'new' и undefined 'new' предполагают, что победил bind. Ошибки нет: привязанные функции можно вызывать через new (если исходная функция конструктор).

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

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