В JavaScript одна и та же функция может выполнять две разные роли. Обычная User('Аня') — просто вызов; а new User('Аня') — вызов через конструктор: язык добавляет всего одно ключевое слово, и семантика меняется полностью. Функция становится «фабрикой объектов», а её код — инициализацией нового экземпляра.

Такой стиль — наследие раннего JavaScript, когда классов ещё не было и объектно-ориентированный код собирался из функций-конструкторов и prototype-цепочек. С 2015 года есть более чистый синтаксис class, но под капотом там ровно тот же new-вызов.

Что в этой главе

Две подглавы:

  • this в вызове конструктора — что делает new под капотом, работа с ES6-классами, разница между конструкторами и factory-функциями, случаи с явным return.
  • Опасность: не забывайте про new — классическая ошибка «вызвал конструктор без new». Как защититься: соглашение о PascalCase-имени, автоматическая защита в class-синтаксисе, проверка через new.target.

Вызов конструктора — более редкий сценарий в современном коде, чем метод-вызов или простой вызов. Причина в том, что классы (ES6+) и factory-функции покрывают большинство случаев. Но new всё ещё встречается регулярно — и знать правила про this в конструкторе важно, чтобы читать и писать классовый код.