← Tutti gli episodi
Copertina di Oggetti fatti di oggetti: i prototipi
Stagione 45 · Episodio 006

Oggetti fatti di oggetti: i prototipi

6 settembre 2026 5:09
0:00 5:09

Ciao, e benvenuto nella sesta puntata della quarantacinquesima stagione. Nelle scorse puntate abbiamo esplorato come JavaScript gestisce il tempo e le funzioni. Oggi cambiamo tema e guardiamo come JavaScript pensa agli oggetti, alle cose. E qui c'è una sorpresa, perché lo fa in un modo insolito, più antico di quello a cui siamo abituati, e oggi quasi sempre nascosto sotto una maschera familiare. L'idea è che in JavaScript gli oggetti nascono da altri oggetti. Oggi capiamo i prototipi, e il suo modo peculiare di modellare le cose.

Partiamo da come fanno gli altri linguaggi, perché il contrasto illumina. Nella maggior parte dei linguaggi che hanno gli oggetti, si usa l'idea di classe. Una classe è un progetto, uno stampo: definisci una volta com'è fatta, poniamo, una automobile, tutte le sue caratteristiche, e poi da quello stampo ne produci tanti esemplari uguali. Lo stampo, il progetto, è una cosa a parte, separata dalle automobili concrete che ne escono. Prima disegni lo schema, poi timbri gli oggetti. È il modo più diffuso di pensare agli oggetti: dal progetto agli esemplari.

Voglio darti il modo di JavaScript, perché è diverso e più antico. JavaScript, sotto sotto, fa una cosa differente. Non c'è uno stampo separato dalle cose: gli oggetti ereditano direttamente da altri oggetti. Un oggetto può semplicemente avere un altro oggetto come suo genitore, a cui appoggiarsi. Non un progetto astratto, ma un altro oggetto concreto, già esistente, che fa da modello. Le cose non nascono da uno schema disegnato prima: nascono da altre cose. È un albero di parentele tra oggetti reali, non una catena di montaggio che timbra copie da un disegno.

Voglio mostrarti come funziona questa parentela, perché è il meccanismo chiave. Ecco come lavora: se chiedi a un oggetto qualcosa che lui non possiede, non si arrende. Va a guardare dal suo oggetto genitore, quello a cui si appoggia. E se nemmeno il genitore ce l'ha, si guarda dal genitore del genitore, e così su, risalendo una catena di antenati, finché qualcuno risponde o si arriva in cima. Questa catena di ho-questo, altrimenti-chiedi-a-chi-viene-prima-di-me si chiama catena dei prototipi. Ogni oggetto ha alle spalle una fila di antenati a cui delegare le richieste che non sa soddisfare da solo.

Voglio parlarti della maschera, perché è ciò che rende tutto confuso oggi. Adesso, la maggior parte delle persone scrive JavaScript usando una parola che sembra proprio la classe degli altri linguaggi. Sembra di disegnare stampi, come altrove. Ma è una maschera gentile, un modo di dire più familiare, messo sopra il vecchio meccanismo dei prototipi che continua a girare sotto. Lo stampo, in JavaScript, è un'illusione: gratti la superficie, e sotto trovi sempre oggetti che nascono da altri oggetti, fino in fondo. La classe è un travestimento comodo del vero motore, che resta quello delle parentele tra oggetti.

Voglio dirti perché valga la pena saperlo, perché non è pedanteria. Se è nascosto, perché parlarne? Per due motivi. Primo, perché è una finestra sul carattere di JavaScript: flessibile, tutto centrato sugli oggetti, e un po' fuori dagli schemi, anche in questo. Secondo, e più utile: quando qualcosa si comporta in modo sorprendente, spesso la spiegazione vera è proprio lì sotto, nel meccanismo dei prototipi nascosto dalla maschera. È di nuovo il tema di sempre: il modello sotto la magia. Chi conosce il motore vero, e non solo il travestimento, capisce i comportamenti strani che al primo sguardo sembrano inspiegabili. La maschera è comoda, ma sapere cosa c'è dietro ti salva.

Voglio darti l'immagine che rende chiara questa idea, e la lezione. Pensa alla differenza tra una fabbrica che timbra pezzi identici da un unico stampo, e una discendenza di esseri viventi, dove ognuno può dire: se io non ho ciò che cerchi, chiedilo a chi mi ha generato. Nel primo caso, copie da un disegno; nel secondo, una catena di chiedi-al-mio-antenato. JavaScript, nel profondo, è il secondo. La lezione è questa: c'è più di un modo di immaginare gli oggetti, dal progetto, oppure da altri oggetti; e il modo antico di JavaScript, oggi quasi sempre mascherato, ci ricorda una cosa preziosa: la superficie familiare di un linguaggio spesso nasconde una macchina diversa, e interessante, che lavora sotto.

Per oggi ci fermiamo qui. Abbiamo visto il modo peculiare in cui JavaScript pensa agli oggetti. Mentre quasi tutti i linguaggi usano le classi, stampi separati da cui timbrare esemplari, JavaScript sotto sotto fa altro: gli oggetti nascono da altri oggetti. Se un oggetto non ha ciò che chiedi, lo domanda al suo genitore, e al genitore del genitore, risalendo la catena dei prototipi. Oggi si scrive con una parola che sembra la classe di altrove, ma è una maschera gentile sopra il vecchio motore dei prototipi. Vale la pena saperlo, perché quando qualcosa stupisce, la spiegazione è spesso lì sotto: il modello sotto la magia, ancora. La lezione: c'è più di un modo di immaginare gli oggetti, e la superficie nasconde spesso una macchina diversa. Nella prossima puntata vediamo la scioltezza dei tipi morbidi. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.