Выбор ответа Middle Прототипы и классы обновлено

Конструктор возвращает объект

Вопрос

Что выведет код?

function Item() {
  this.a = 1;
  return { b: 2 };
}
const item = new Item();
console.log(item.a, item.b, item instanceof Item);

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: undefined 2 false. Если конструктор явно возвращает объект, new отдаёт именно его, а созданный this выбрасывается.

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

  1. 1 2 true
  2. 1 undefined true
  3. undefined 2 falseправильный ответ
  4. undefined 2 true

Разбор

Если конструктор явно возвращает объект, new отдаёт именно его, а созданный this выбрасывается. У возвращённого { b: 2 } нет a, а его прототип Object.prototype, а не Item.prototype, поэтому instanceof даёт false. Если бы вернулся примитив (return 5), он был бы проигнорирован и результатом стал бы this. Варианты с a === 1 упускают этот шаг new.

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

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