Що таке конструктор класу?
Конструктор - це спеціальний метод класу в JavaScript, який викликається автоматично під час створення нового об'єкта через new.
Він потрібен для ініціалізації об'єкта: присвоєння початкових значень властивостям, виклику методів тощо.
Розглянемо детальніше:
Що таке конструктор
Приклад:
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(...)і використовується, щоб задати початковий стан об'єкта.
Як працює конструктор під капотом
Коли ти пишеш:
const user = new User('Oleh', 25);відбувається таке:
- Створюється новий порожній об'єкт
{}. - Цей об'єкт зв'язується з прототипом
User.prototype. - Викликається
constructor('Oleh', 25)всередині класу. - Всередині конструктора виконується код, зазвичай
this.name = .... - Повертається створений об'єкт (
this).
Тобто
newсам створює об'єкт і повертає його, тобі не потрібно писатиreturn.
Важливі особливості
1. Конструктор викликається автоматично при new
new User('Alex', 30); // викликає constructor()2. У класу може бути тільки один конструктор
class Test {
constructor() {}
constructor() {} // Помилка: Duplicate constructor
}Якщо потрібна різна поведінка, можна використати параметри за умовчанням або умови всередині конструктора.
3. Конструктор може бути відсутнім
Якщо ти не визначаєш constructor, він створюється за умовчанням:
class User {
sayHi() {
console.log('Hi!');
}
}
const user = new User();
user.sayHi(); // Hi!Під капотом браузер сам додасть:
constructor() {}4. Конструктор у успадкованих класах
Коли клас успадковує інший через extends,
у ньому потрібно викликати конструктор батьківського класу через super(), перш ніж використовувати this.
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,
але якщо явно повернути об'єкт, він замінить створений екземпляр:
class Example {
constructor() {
return { custom: true };
}
}
const obj = new Example();
console.log(obj); // { custom: true }Якщо повернути не об'єкт (наприклад, число чи рядок), це ігнорується.
Приклад: клас з логікою в конструкторі
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, і використовується для ініціалізації властивостей та підготовки екземпляра.
Формула для запам'ятовування:
class X {
constructor(...) {
this.properties = ...
}
}
const obj = new X(...);Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.