Чи можна не визначати конструктор?
Що відбувається, якщо конструктора немає
Якщо ти не визначаєш 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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.