prima per quanto riguarda la domanda nel titolo (che in realtà è diverso da cosa dimostrate con gli esempi di codice):
"Come ho capito gli oggetti sono passati per riferimento in JavaScript"
No, Javascript non supporta il passaggio del parametro per riferimento. Tutti i parametri vengono passati per valore, ma il valore può essere un riferimento.
Esempio:
var a = { answer: 42 };
function f(x) {
alert(x.answer); // shows 42
x = { answer: 0 };
alert(x.answer); // shows 0
}
f(a);
alert(a.answer); // shows 42
Poiché il parametro viene passato per valore, la variabile x
è separato dalla variabile a
, così assegnando un nuovo oggetto x
non modifica il valore di a
.
Torna al tuo codice:
Quando si assegna un riferimento a un oggetto da una variabile ad un altro, è il riferimento che viene copiato, non l'oggetto. Ottieni due variabili che fanno riferimento allo stesso oggetto.
Entrambe le variabili possono essere utilizzate per accedere ai membri nell'oggetto, come dimostra il primo esempio di codice.
Se si assegna un nuovo oggetto alla prima variabile, si sostituirà il riferimento nella variabile, non si sovrascriverà l'oggetto a cui punta attualmente.L'oggetto è ancora intatto e la seconda variabile punta ancora ad esso. Ottieni due variabili che puntano a un oggetto ciascuna, come dimostra il tuo secondo esempio di codice.