6.1 Konstruktory klas
Konstruktory i metody klas są podstawowymi elementami programowania obiektowego w JavaScript. Pozwalają na tworzenie i inicjalizację obiektów, a także definiowanie ich zachowań. Poniżej omówimy, jak działają konstruktory i metody klas oraz jak je używać.
Co to jest konstruktor?
Konstruktor to specjalna metoda klasy, która jest wywoływana przy tworzeniu nowej instancji klasy. Służy do inicjalizacji obiektu, ustawiania wartości jego właściwości i wykonywania innych zadań początkowych.
Definiowanie konstruktora
Konstruktor jest definiowany z użyciem słowa kluczowego constructor
. Wewnątrz konstruktora za pomocą
słowa kluczowego this
można odwoływać się do właściwości i metod obiektu.
Składnia:
class ClassName {
constructor(parametry) {
// Inicjalizacja obiektu
}
}
Przykład:
W klasie Person
metoda constructor
przyjmuje dwa parametry: name
i age
.
Te parametry są używane do inicjalizacji właściwości name
i age
tworzonego obiektu.
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); // Wyświetli: Alice
console.log(person2.age); // Wyświetli: 25
Konstruktor domyślny
Jeśli konstruktor nie jest jawnie zdefiniowany, JavaScript automatycznie tworzy pusty konstruktor domyślny.
Przykład:
class Animal {}
const animal = new Animal();
console.log(animal); // Wyświetli zawartość klasy Animal {}
4.2 Metody klas
Metody klas są definiowane wewnątrz ciała klasy i zapewniają funkcjonalność dla obiektów tworzonych przez tę klasę. Metody są automatycznie dodawane do prototypu klasy, co pozwala wszystkim instancjom klasy dziedziczyć i używać ich.
Składnia:
class ClassName {
constructor(parametry) {
// Inicjalizacja obiektu
}
metoda1() {
// Ciało metody
}
metoda2() {
// Ciało metody
}
}
Przykład:
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"
Wyjaśnienie:
- W klasie
Car
zdefiniowane są dwie metody:drive()
igetDetails()
- Metoda
drive()
zwiększa przebieg samochodu i wyświetla informację o pokonanej odległości - Metoda
getDetails()
zwraca łańcuch znaków z informacją o samochodzie
6.3 Prywatne metody
Wraz z wprowadzeniem nowych specyfikacji ECMAScript pojawiła się możliwość tworzenia prywatnych metod i właściwości, które są niedostępne poza klasą. Do tego celu używa się symbolu # jako części nazwy.
Przykład prywatnych metod i właściwości:
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); // Wyświetli: Deposited 50. New balance: 150
account.withdraw(30); // Wyświetli: Withdrew 30. New balance: 120
console.log(account.getBalance()); // Wyświetli: 120
// Próba dostępu do prywatnej metody lub właściwości wywoła błąd
account.#balance; // SyntaxError
account.#validateAmount(50); // SyntaxError
GO TO FULL VERSION