область JavaScript, объекты при вызове функции-конструктора с new создаётся объект, который связывается с this и возвращается по умолчанию если функция-конструктор явно возвращает объект, результатом вызова становится именно он, а не созданный по умолчанию объект при возврате примитива результатом остаётся созданный по умолчанию объект вызов без new не приводит к автоматическому созданию объекта — this указывает на глобальный объект или на undefined в strict mode итог: при использовании new объект создаётся либо заменяется возвращённым объектом; без new создание объекта не гарантируется это важно для правильного применения конструкторов и…
Всегда ли функция-конструктор создаёт объект в JavaScript?
область JavaScript, объекты при вызове функции-конструктора с new создаётся объект, который связывается с this и возвращается по умолчанию если функция-конструктор явно возвращает объект, результатом вызова становится…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Всегда ли функция-конструктор создаёт объект в JavaScript?
- область JavaScript, объекты
- при вызове функции-конструктора с
newсоздаётся объект, который связывается сthisи возвращается по умолчанию - если функция-конструктор явно возвращает объект, результатом вызова становится именно он, а не созданный по умолчанию объект
- при возврате примитива результатом остаётся созданный по умолчанию объект
- вызов без
newне приводит к автоматическому созданию объекта —thisуказывает на глобальный объект или наundefinedв strict mode - итог: при использовании
newобъект создаётся либо заменяется возвращённым объектом; безnewсоздание объекта не гарантируется - это важно для правильного применения конструкторов и предотвращения ошибок
Такой ответ показывает глубокое понимание работы функций-конструкторов и области видимости this.
Подробный ответ
Основной ответ
Функция-конструктор в JavaScript не во всех случаях создаёт новый объект: результат зависит от того, используется ли при вызове ключевое слово new. При обычном вызове без new функция выполняется как стандартная, поэтому новый объект автоматически не появляется. Вызов с new, напротив, создаёт объект и связывает его с this.
При этом явный возврат объекта из функции-конструктора изменяет результат вызова: возвращённый объект заменяет созданный this. Если функция возвращает примитив либо не возвращает значение, результатом становится автоматически созданный объект this.
Ключевые моменты
- При использовании
newJavaScript выполняет следующие действия: - Создаёт пустой объект
- Связывает созданный объект с
thisфункции-конструктора - Возвращает
this, если функция не вернула объект - Возвращает объект, явно возвращённый функцией-конструктором, вместо
this - При вызове без
newновый объект не создаётся, аthisсвязывается с глобальным объектом (в строгом режиме — сundefined), поэтому ожидаемый объект не формируется
Практический контекст
В реальных проектах функции-конструкторы следует вызывать с new либо использовать классы ES6, которые явно предназначены для создания объектов. Чтобы избежать ошибки, внутри функции-конструктора часто выполняют проверку if (!(this instanceof Constructor)) { return new Constructor(); }, гарантирующую создание объекта.