Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке конструктор класу?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Конструктор** - це спеціальний метод класу в JavaScript, який викликається автоматично під час створення нового об'єкта через `new`. Він потрібен для ініціалізації об'єкта: присвоєння початкових значень властивостям, виклику методів тощо. **Ключове:** якщо конструктор не визначити явно, JavaScript додає порожній конструктор за умовчанням, а в похідних класах перед використанням `this` обов'язково потрібно викликати `super()`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняКонструктор - це **спеціальний метод класу** в JavaScript, який викликається **автоматично під час створення нового об'єкта** через `new`. Він потрібен для **ініціалізації** об'єкта: присвоєння початкових значень властивостям, виклику методів тощо. Розглянемо детальніше: --- ## Що таке конструктор ### Приклад: ```javascript class User { constructor(name, age) { this.name = name; // створюємо властивість об'єкта this.age = age; } sayHi() { console.log(`Hi, my name is ${this.name}, I am ${this.age}`); } } const user = new User('Oleh', 25); user.sayHi(); // Hi, my name is Oleh, I am 25 ``` > Метод `constructor()` спрацьовує **в момент виклику** `new User(...)` > і використовується, щоб задати початковий стан об'єкта. --- ## Як працює конструктор під капотом Коли ти пишеш: ```javascript const user = new User('Oleh', 25); ``` відбувається таке: 1. Створюється **новий порожній об'єкт** `{}`. 2. Цей об'єкт зв'язується з прототипом `User.prototype`. 3. Викликається `constructor('Oleh', 25)` всередині класу. 4. Всередині конструктора виконується код, зазвичай `this.name = ...`. 5. Повертається створений об'єкт (`this`). > Тобто `new` сам створює об'єкт і повертає його, тобі не потрібно писати `return`. --- ## Важливі особливості ### 1. Конструктор викликається **автоматично** при `new` ```javascript new User('Alex', 30); // викликає constructor() ``` --- ### 2. У класу може бути **тільки один конструктор** ```javascript class Test { constructor() {} constructor() {} // Помилка: Duplicate constructor } ``` > Якщо потрібна різна поведінка, можна використати параметри за умовчанням або умови всередині конструктора. --- ### 3. Конструктор може бути **відсутнім** Якщо ти не визначаєш `constructor`, він створюється **за умовчанням**: ```javascript class User { sayHi() { console.log('Hi!'); } } const user = new User(); user.sayHi(); // Hi! ``` Під капотом браузер сам додасть: ```javascript constructor() {} ``` --- ### 4. Конструктор у **успадкованих класах** Коли клас успадковує інший через `extends`, у ньому потрібно **викликати конструктор батьківського класу** через `super()`, перш ніж використовувати `this`. ```javascript class Person { constructor(name) { this.name = name; } } class Student extends Person { constructor(name, group) { super(name); // викликаємо конструктор батьківського класу this.group = group; } } const s = new Student('Oleh', 'Frontend-2025'); console.log(s.name); // Oleh console.log(s.group); // Frontend-2025 ``` > Якщо не викликати `super()`, буде помилка: > `ReferenceError: Must call super constructor in derived class before accessing 'this'`. --- ### 5. Конструктор може повертати **інший об'єкт** Зазвичай конструктор не має `return`, але якщо явно повернути **об'єкт**, він замінить створений екземпляр: ```javascript class Example { constructor() { return { custom: true }; } } const obj = new Example(); console.log(obj); // { custom: true } ``` > Якщо повернути **не об'єкт** (наприклад, число чи рядок), це ігнорується. --- ## Приклад: клас з логікою в конструкторі ```javascript class Product { constructor(name, price) { this.name = name; this.price = price > 0 ? price : 0; // перевірка } getInfo() { return `${this.name}: $${this.price}`; } } const p1 = new Product('Shirt', 2500); const p2 = new Product('Coat', -100); console.log(p1.getInfo()); // Shirt: $2500 console.log(p2.getInfo()); // Coat: $0 ``` > Часто конструктор використовується для валідації та підготовки даних. --- ## Коротке порівняння: `constructor` vs звичайні методи | Особливість | `constructor()` | Звичайні методи | | --- | --- | --- | | Викликається автоматично при `new` | Так | Ні | | Може бути лише один | Так | Ні | | Використовується для ініціалізації об'єкта | Так | Іноді | | Може повертати інший об'єкт | Так | Ні | | Доступ через `this` | Так | Так | --- ## Коротко: > **Конструктор класу** - це спеціальний метод, > який викликається під час створення об'єкта через `new`, > і використовується для **ініціалізації властивостей** та **підготовки екземпляра**. Формула для запам'ятовування: ```javascript class X { constructor(...) { this.properties = ... } } const obj = new X(...); ```Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.