Cosa sono i prototipi in JavaScript
In JavaScript, ogni oggetto ha un prototipo, che è essenzialmente un oggetto da cui eredita proprietà e metodi. Quando si cerca di accedere a una proprietà o a un metodo di un oggetto e questo non è presente nell'oggetto stesso, JavaScript cerca nel prototipo dell'oggetto padre e continua a risalire la "catena dei prototipi" fino a quando trova la proprietà o il metodo richiesto o raggiunge l'oggetto di base Object.prototype.
I prototipi sono fondamentali per la programmazione orientata agli oggetti in JavaScript. Permettono di condividere metodi e proprietà tra oggetti simili in modo efficiente, risparmiando memoria e semplificando la gestione del codice.
Un altro aspetto fondamentale è che JavaScript è un linguaggio basato su prototipi, il che significa che non ha classi tradizionali come altri linguaggi di programmazione. Invece, gli oggetti vengono creati come istanze di altri oggetti esistenti, utilizzando i prototipi come modello.
Creare un prototipo in javaScript
Per creare un prototipo in JavaScript, puoi utilizzare una funzione costruttrice o un oggetto letterale. Ecco un esempio utilizzando una funzione costruttrice:
function Animale(nome) {
this.nome = nome;
}
Animale.prototype.saluta = function() {
console.log(`Ciao, sono ${this.nome}!`);
};
const cane = new Animale("Fido");
cane.saluta(); // Stampa: 'Ciao, sono Fido!'
In questo esempio, abbiamo creato un prototipo Animale con una proprietà nome e un metodo saluta. Gli oggetti creati utilizzando new Animale() ereditano automaticamente sia la proprietà nome che il metodo saluta dal prototipo Animale.
Ereditarietà dei prototipi
Un vantaggio dei prototipi è la possibilità di creare catene di ereditarietà. Puoi estendere un prototipo esistente per creare un nuovo oggetto con proprietà e metodi aggiuntivi. Ecco un esempio:
function Animale(nome) {
this.nome = nome;
}
Animale.prototype.saluta = function() {
console.log(`Ciao, sono ${this.nome}!`);
};
function Uccello(nome, specie) {
Animale.call(this, nome); // Chiama il costruttore di Animale
this.specie = specie;
}
// Eredita i metodi di Animale
Uccello.prototype = Object.create(Animale.prototype);
Uccello.prototype.vola = function() {
console.log(`${this.nome} sta volando!`);
};
const pappagallo = new Uccello("Polly", "Pappagallo");
pappagallo.saluta(); // Stampa: 'Ciao, sono Polly!'
pappagallo.vola(); // Stampa: 'Polly sta volando!'
In questo esempio, abbiamo creato un nuovo prototipo Uccello che eredita dal prototipo Animale. Questo ci consente di condividere il metodo saluta da Animale e aggiungere il metodo vola specifico per gli uccelli.