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