Что вернёт функция-конструктор JavaScript, если вернуть из неё примитив?

В JavaScript конструктор — это функция, которую вызывают с оператором new возвращаемый примитив не учитывается: создаётся объект this результатом становится новый объект, а не примитив если же вернуть объект, он…

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

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

В JavaScript конструктор — это функция, которую вызывают с оператором new возвращаемый примитив не учитывается: создаётся объект this результатом становится новый объект, а не примитив если же вернуть объект, он подменит 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. В старом подходе с функциями-конструкторами такая ошибка встречается часто, особенно когда разработчик пытается "имитировать" фабричную функцию.

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

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

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

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