6.1 Costruttori di classi
I costruttori e i metodi delle classi sono elementi fondamentali della programmazione orientata agli oggetti in JavaScript. Consentono di creare e inizializzare oggetti, oltre a definirne il comportamento. Di seguito esamineremo come funzionano i costruttori e i metodi delle classi e come utilizzarli.
Che cos'è un costruttore?
Un costruttore è un metodo speciale di una classe che viene chiamato quando viene creato un nuovo istanza della classe. Viene utilizzato per inizializzare un oggetto, impostare i valori delle sue proprietà ed eseguire altre attività iniziali.
Definizione di un costruttore
Un costruttore è definito utilizzando la parola chiave constructor
. All'interno del costruttore, tramite
la parola chiave this
è possibile accedere alle proprietà e ai metodi dell'oggetto.
Sintassi:
class ClassName {
constructor(parametri) {
// Inizializzazione dell'oggetto
}
}
Esempio:
All'interno della classe Person
il metodo constructor
accetta due parametri: name
e age
.
Questi parametri vengono utilizzati per inizializzare le proprietà name
e age
dell'oggetto creato.
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); // Mostrerà: Alice
console.log(person2.age); // Mostrerà: 25
Costruttore predefinito
Se un costruttore non è definito esplicitamente, JavaScript crea automaticamente un costruttore vuoto predefinito.
Esempio:
class Animal {}
const animal = new Animal();
console.log(animal); // Mostrerà il contenuto della classe Animal {}
4.2 Metodi di classe
I metodi di una classe vengono definiti all'interno del corpo della classe e forniscono funzionalità per gli oggetti creati da quella classe. I metodi vengono automaticamente aggiunti al prototipo della classe, il che consente a tutte le istanze della classe di ereditarli e utilizzarli.
Sintassi:
class ClassName {
constructor(parametri) {
// Inizializzazione dell'oggetto
}
metodo1() {
// Corpo del metodo
}
metodo2() {
// Corpo del metodo
}
}
Esempio:
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 ha percorso 50 miglia. Chilometraggio totale: 50"
console.log(myCar.getDetails()); // "Toyota Camry, Chilometraggio: 50"
Spiegazione:
- Nella classe
Car
sono definiti due metodi:drive()
egetDetails()
- Il metodo
drive()
aumenta il chilometraggio dell'auto e mostra informazioni sulla distanza percorsa - Il metodo
getDetails()
restituisce una stringa con informazioni sull'auto
6.3 Metodi privati
Con l'introduzione delle nuove specifiche ECMAScript, è diventato possibile creare metodi e proprietà private, che non sono accessibili al di fuori della classe. Per fare ciò, si utilizza il simbolo # come parte del nome.
Esempio di metodi e proprietà private:
class BankAccount {
#balance = 0;
constructor(initialBalance) {
this.#balance = initialBalance;
}
#validateAmount(amount) {
if (amount <= 0) {
throw new Error('L\'importo deve essere positivo.');
}
}
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('Fondi insufficienti.');
}
this.#balance -= amount;
console.log(`Withdrew ${amount}. New balance: ${this.#balance}`);
}
getBalance() {
return this.#balance;
}
}
const account = new BankAccount(100);
account.deposit(50); // Mostrerà: Deposited 50. New balance: 150
account.withdraw(30); // Mostrerà: Withdrew 30. New balance: 120
console.log(account.getBalance()); // Mostrerà: 120
// Tentativo di accesso a un metodo o proprietà privata causerà un errore
account.#balance; // SyntaxError
account.#validateAmount(50); // SyntaxError
GO TO FULL VERSION