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} drove ${distance} miles. Total mileage: ${this.mileage}`);
}
getDetails() {
return `${this.brand} ${this.model}, Mileage: ${this.mileage}`;
}
}
const myCar = new Car('Toyota', 'Camry');
myCar.drive(50); // "Toyota Camry drove 50 miles. Total mileage: 50"
console.log(myCar.getDetails()); // "Toyota Camry, Mileage: 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('Amount must be positive.');
}
}
deposit(amount) {
this.#validateAmount(amount);
this.#balance += amount;
console.log(`Deposited ${amount}. New balance: ${this.#balance}`);
}
withdraw(amount) {
this.#validateAmount(amount);
if (amount > this.#balance) {
throw new Error('Insufficient funds.');
}
this.#balance -= amount;
console.log(`Withdrew ${amount}. New balance: ${this.#balance}`);
}
getBalance() {
return this.#balance;
}
}
const account = new BankAccount(100);
account.deposit(50); // Выведет: Deposited 50. New balance: 150
account.withdraw(30); // Выведет: Withdrew 30. New balance: 120
console.log(account.getBalance()); // Выведет: 120
// Попытка доступа к приватному методу или свойству вызовет ошибку
account.#balance; // SyntaxError
account.#validateAmount(50); // SyntaxError
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ