В JavaScript конструктор — это функция, которую вызывают с оператором new возвращаемый примитив не учитывается: создаётся объект this результатом становится новый объект, а не примитив если же вернуть объект, он подменит this это позволяет вручную управлять возвращаемым значением знание правила необходимо для корректной работы с конструкторами на практике обычно возвращают объект либо не указывают возврат явно
Что вернёт функция-конструктор JavaScript, если вернуть из неё примитив?
В JavaScript конструктор — это функция, которую вызывают с оператором new возвращаемый примитив не учитывается: создаётся объект this результатом становится новый объект, а не примитив если же вернуть объект, он…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Что вернёт функция-конструктор JavaScript, если вернуть из неё примитив?
- В JavaScript конструктор — это функция, которую вызывают с оператором new
- возвращаемый примитив не учитывается: создаётся объект this
- результатом становится новый объект, а не примитив
- если же вернуть объект, он подменит this
- это позволяет вручную управлять возвращаемым значением
- знание правила необходимо для корректной работы с конструкторами
- на практике обычно возвращают объект либо не указывают возврат явно
Причина такого результата — внутренние правила работы конструктора в JavaScript: если функция возвращает примитив, фактически наружу передаётся автоматически созданный объект this.
Подробный ответ
Основной ответ
Когда функция-конструктор в JavaScript возвращает примитив — например, строку, число, boolean, null или undefined, — это значение игнорируется. Поэтому результатом вызова с оператором new по-прежнему будет объект, на который ссылается this. Иными словами, в такой ситуации конструктор отдаёт автоматически созданный объект, а не примитив.
Ключевые моменты
- При обращении к функции через
newсначала создаётся новый объект, который внутри конструктора становится контекстомthis. - Если функция возвращает объект, например,
{}, именно он заменяетthisи становится результатом вызова. - Возврат примитива не меняет результат: такое значение отбрасывается, а наружу возвращается созданный автоматически объект.
- Это стандартное поведение ECMAScript: разработчик может явно подменить возвращаемый объект или ограничиться использованием
this. - Например,
return 5илиreturn "text"внутри конструктора не изменят итоговый результат, тогда какreturn {foo: "bar"}заменяет его.
Практический контекст
Это правило важно учитывать при разработке классов и функций-конструкторов в ES5 и более ранних версиях. В ES6+ при использовании class подобный возврат запрещён: конструктор класса не может вернуть значение, за исключением this. В старом подходе с функциями-конструкторами такая ошибка встречается часто, особенно когда разработчик пытается "имитировать" фабричную функцию.