В JavaScript одна и та же функция может выполнять две разные роли. Обычная User('Аня') — просто вызов; а new User('Аня') — вызов через конструктор: язык добавляет всего одно ключевое слово, и семантика меняется полностью. Функция становится «фабрикой объектов», а её код — инициализацией нового экземпляра.
Такой стиль — наследие раннего JavaScript, когда классов ещё не было и объектно-ориентированный код собирался из функций-конструкторов и prototype-цепочек. С 2015 года есть более чистый синтаксис class, но под капотом там ровно тот же new-вызов.
Что в этой главе
Две подглавы:
- this в вызове конструктора — что делает new под капотом, работа с ES6-классами, разница между конструкторами и factory-функциями, случаи с явным return.
- Опасность: не забывайте про new — классическая ошибка «вызвал конструктор без new». Как защититься: соглашение о PascalCase-имени, автоматическая защита в class-синтаксисе, проверка через new.target.
Вызов конструктора — более редкий сценарий в современном коде, чем метод-вызов или простой вызов. Причина в том, что классы (ES6+) и factory-функции покрывают большинство случаев. Но new всё ещё встречается регулярно — и знать правила про this в конструкторе важно, чтобы читать и писать классовый код.