Что вернёт функция-конструктор, если явно вернуть объект: возвращённый объект или this?

Результат возврата объекта из функции-конструктора Функция-конструктор — обычная функция, предназначенная для создания объектов через new При возврате примитива, например числа или строки, это значение игнорируется, и…

Короткий ответ

Что ответить на собеседовании

Результат возврата объекта из функции-конструктора Функция-конструктор — обычная функция, предназначенная для создания объектов через new При возврате примитива, например числа или строки, это значение игнорируется, и возвращается this Если возвращён объект, например {} или new Object(), результатом становится именно он, а не this Так можно заменить создаваемый экземпляр другим объектом На практике это встречается редко и обычно нарушает инвариант конструктора Механизм может пригодиться в паттернах типа фабрика, когда требуется вернуть пользовательский объект Итог: объект из явного return заменяет результат new, а примитив — нет

Подробный разбор

Ответ с пояснениями

Результат возврата объекта из функции-конструктора

  • Функция-конструктор — обычная функция, предназначенная для создания объектов через new
  • При возврате примитива, например числа или строки, это значение игнорируется, и возвращается this
  • Если возвращён объект, например {} или new Object(), результатом становится именно он, а не this
  • Так можно заменить создаваемый экземпляр другим объектом
  • На практике это встречается редко и обычно нарушает инвариант конструктора
  • Механизм может пригодиться в паттернах типа фабрика, когда требуется вернуть пользовательский объект
  • Итог: объект из явного return заменяет результат new, а примитив — нет

Пример:

function Foo() {
this.a = 1;
return { b: 2 }; // вернётся именно этот объект
}
const obj = new Foo();
console.log(obj); // { b: 2 }

Подробный ответ

Основной ответ

В JavaScript явный возврат объекта из функции-конструктора — например, {}, new Object() или другого объекта — делает результатом вызова именно этот объект, а не this. Когда функция возвращает примитив, такой как число, строка или булево значение, либо не возвращает ничего, результатом становится объект this, созданный для экземпляра.

Основные моменты

  • При вызове функции-конструктора с new создаётся пустой объект, который связывается с this внутри функции. Если функция завершает работу возвратом объекта, этот объект подменяет первоначально созданный экземпляр.
  • Примитив, возвращённый из конструктора, игнорируется, поэтому наружу передаётся this.
  • Такое поведение позволяет реализовывать фабричные шаблоны или менять возвращаемый экземпляр. Однако это обычно считают нежелательным паттерном, поскольку он нарушает ожидаемую логику создания объектов.
  • Важно: явный возврат меняет сам объект результата, но не его прототип; прототип определяется свойствами возвращённого объекта или его типом.

Практическое применение

В реальном коде, включая React и другие библиотеки, возврат объекта из конструктора обычно не используют: он способен привести к багам и нарушить инкапсуляцию. Как правило, class и функции-конструкторы ничего не возвращают явно, чтобы не нарушать цепочку прототипов и наследование. Тем не менее этот механизм полезен при создании фабричных функций, которым требуется гибко управлять экземплярами.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку