Ereditarietà prototipale
Ereditarietà prototipale
In JavaScript non esistono classi vere e proprie come in altri linguaggi tradizionali: tutto si basa sugli oggetti. L’ereditarietà prototipale permette a un oggetto di accedere a proprietà e metodi definiti in un altro oggetto, tramite la catena dei prototipi.
Cos’è il prototipo
Ogni oggetto in JavaScript possiede un collegamento nascosto chiamato __proto__ che punta al suo prototipo. Se cerchiamo una proprietà o un metodo in un oggetto e non lo troviamo, JavaScript prosegue la ricerca nel prototipo, continuando fino a risalire la catena.
- Un prototipo è un oggetto che fornisce proprietà e metodi ad altri oggetti.
- La catena dei prototipi si ferma quando non ci sono più riferimenti (null).
- Le classi moderne in realtà usano questo meccanismo dietro le quinte.
Esempio base con prototipo
In questo esempio aggiungiamo un metodo al prototipo di un costruttore. Tutti gli oggetti creati con quel costruttore potranno usare il metodo:
Codice Esempio: Funzione costruttore e prototipo

function Persona(nome) {
this.nome = nome;
}
Persona.prototype.saluta = function() {
return "Ciao, sono " + this.nome;
};
let p1 = new Persona("Anna");
console.log(p1.saluta());
// Output: Ciao, sono Anna
Ereditarietà tra funzioni costruttore
Possiamo creare una funzione costruttore che eredita le proprietà e i metodi di un’altra usando call() e collegando i prototipi:
Codice Esempio: Ereditarietà con prototipo

function Animale(nome) {
this.nome = nome;
}
Animale.prototype.muovi = function() {
return this.nome + " si sta muovendo";
};
function Cane(nome, razza) {
Animale.call(this, nome);
this.razza = razza;
}
Cane.prototype = Object.create(Animale.prototype);
Cane.prototype.constructor = Cane;
Cane.prototype.abbaia = function() {
return this.nome + " sta abbaiando!";
};
let c1 = new Cane("Fido", "Labrador");
console.log(c1.muovi());
// Output: Fido si sta muovendo
console.log(c1.abbaia());
// Output: Fido sta abbaiando!
Tabella riassuntiva
Concetto | Descrizione | Esempio |
---|---|---|
Prototipo | Oggetto da cui un altro oggetto eredita proprietà e metodi. | Oggetto.__proto__ |
Funzione costruttore | Funzione usata per creare oggetti con proprietà iniziali. | function Persona(nome) {...} |
Object.create() | Crea un nuovo oggetto collegato a un prototipo specifico. | Object.create(Animale.prototype) |
Considerazioni
L’ereditarietà prototipale è alla base di JavaScript. Le classi introdotte con ES6 sono solo una sintassi più leggibile, ma dietro usano sempre i prototipi. Comprendere questo meccanismo è fondamentale per capire come funziona la condivisione di metodi e proprietà tra oggetti.