Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Чи можна не визначати конструктор?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Так, конструктор можна не визначати: якщо в класі немає `constructor()`, JavaScript **автоматично створює його за умовчанням**. У класі без успадкування цей типовий конструктор просто нічого не робить, а в класі, що успадковує інший, він сам викликає `super()`. **Ключове:** конструктор стає обов'язковим лише тоді, коли клас, що успадковує, додає власні поля або логіку, і в такому разі `super()` треба викликати вручну першим рядком, перед використанням `this`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Що відбувається, якщо конструктора немає Якщо ти не визначаєш `constructor()`, JavaScript **автоматично створює його за умовчанням**. ### Приклад: ```javascript class User { greet() { console.log("Hi!"); } } const u = new User(); u.greet(); // Hi! ``` Під капотом рушій створює **ось такий конструктор**: ```javascript class User { constructor(...args) { super(...args); // якщо є батьківський клас } } ``` --- ## Якщо клас **не успадковує** (`extends` немає) Тоді стандартний "порожній" конструктор просто нічого не робить: ```javascript class User {} // аналогічно: class User { constructor() {} } ``` --- ## Якщо клас **успадковує** інший (`extends` є) Тоді **конструктор обов'язковий лише якщо ти хочеш додати логіку і використовувати** `this`. Якщо його немає, рушій сам додає конструктор, який викликає `super()`. ```javascript class Animal { constructor(name) { this.name = name; } } class Dog extends Animal {} // Еквівалентно: class Dog extends Animal { constructor(...args) { super(...args); } } const dog = new Dog("Rex"); console.log(dog.name); // Rex ``` --- ## Важливо: якщо ти сам додаєш конструктор у нащадку Ти **зобов'язаний викликати** `super()` перед використанням `this`, інакше буде помилка. ```javascript class Animal { constructor(name) { this.name = name; } } class Dog extends Animal { constructor(name, breed) { // super() обов'язково першим! super(name); this.breed = breed; } } ``` Якщо не викликати: ```javascript constructor(name, breed) { this.breed = breed; // ReferenceError: Must call super constructor before accessing 'this' } ``` --- ## Підсумок | Ситуація | Чи потрібно писати `constructor()` | | --- | --- | | Клас без успадкування | Не потрібно | | Клас успадковує інший, але не додає нової поведінки | Не потрібно | | Клас успадковує і додає свої поля | Потрібно (і викликати `super()`) | | Потрібно виконати логіку під час створення екземпляра (наприклад, ініціалізація, перевірка) | Потрібно |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.