Skip to main content

Чи можна не визначати конструктор?

Що відбувається, якщо конструктора немає

Якщо ти не визначаєш 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())
Потрібно виконати логіку під час створення екземпляра (наприклад, ініціалізація, перевірка)Потрібно

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.