6.1 Конструктори класів
Конструктори та методи класів є основними елементами об'єктно-орієнтованого програмування в JavaScript. Вони дозволяють створювати та ініціалізувати об'єкти, а також визначати їх поведінку. Нижче ми розглянемо, як працюють конструктори та методи класів, а також як їх використовувати.
Що таке конструктор?
Конструктор — це спеціальний метод класу, який викликається при створенні нового екземпляру класу. Він використовується для ініціалізації об'єкта, встановлення значень його властивостей і виконання інших початкових задач.
Визначення конструктора
Конструктор визначається з використанням ключового слова constructor. Всередині конструктора за допомогою ключового слова this можна звертатися до властивостей та методів об'єкта.
Синтаксис:
class ClassName {
constructor(параметри) {
// Ініціалізація об'єкта
}
}
Приклад:
В класі Person метод constructor приймає два параметри: name і age.
Ці параметри використовуються для ініціалізації властивостей name і age створюваного об'єкта.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const person1 = new Person('Alice', 30);
const person2 = new Person('Bob', 25);
console.log(person1.name); // Виведе: Alice
console.log(person2.age); // Виведе: 25
Конструктор за замовчуванням
Якщо конструктор не визначений явно, JavaScript автоматично створює порожній конструктор за замовчуванням.
Приклад:
class Animal {}
const animal = new Animal();
console.log(animal); // Виведе вміст класу Animal {}
6.2 Методи класів
Методи класів визначаються всередині тіла класу і надають функціональність для об'єктів, створених цим класом. Методи автоматично додаються в прототип класу, що дозволяє всім екземплярам класу успадковувати і використовувати їх.
Синтаксис:
class ClassName {
constructor(параметри) { // Ініціалізація об'єкта }
метод1() { // Тіло методу }
метод2() { // Тіло методу }
}
Приклад:
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
this.mileage = 0;
}
drive(distance) {
this.mileage += distance;
console.log(`${this.brand} ${this.model} проїхав ${distance} миль. Загальний пробіг: ${this.mileage}`);
}
getDetails() {
return `${this.brand} ${this.model}, Пробіг: ${this.mileage}`;
}
}
const myCar = new Car('Toyota', 'Camry');
myCar.drive(50); // "Toyota Camry проїхав 50 миль. Загальний пробіг: 50"
console.log(myCar.getDetails()); // "Toyota Camry, Пробіг: 50"
Пояснення:
- В класі
Carвизначені два методи:drive()таgetDetails() - Метод
drive()збільшує пробіг автомобіля і виводить інформацію про пройдений шлях - Метод
getDetails()повертає рядок з інформацією про автомобіль
6.3 Приватні методи
З введенням нових специфікацій ECMAScript з'явилася можливість створювати приватні методи та властивості, які недоступні за межами класу. Для цього використовується символ # як частина імені.
Приклад приватних методів і властивостей:
class BankAccount {
#balance = 0;
constructor(initialBalance) {
this.#balance = initialBalance;
}
#validateAmount(amount) {
if (amount <= 0) {
throw new Error('Сума повинна бути позитивною.');
}
}
deposit(amount) {
this.#validateAmount(amount);
this.#balance += amount;
console.log(`Депоновано ${amount}. Новий баланс: ${this.#balance}`);
}
withdraw(amount) {
this.#validateAmount(amount);
if (amount > this.#balance) {
throw new Error('Недостатньо коштів.');
}
this.#balance -= amount;
console.log(`Знято ${amount}. Новий баланс: ${this.#balance}`);
}
getBalance() {
return this.#balance;
}
}
const account = new BankAccount(100);
account.deposit(50); // Виведе: Депоновано 50. Новий баланс: 150
account.withdraw(30); // Виведе: Знято 30. Новий баланс: 120
console.log(account.getBalance()); // Виведе: 120
// Спроба доступу до приватного методу або властивості викличе помилку
account.#balance; // SyntaxError
account.#validateAmount(50); // SyntaxError
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ