ottengo un risultato inatteso con il seguente codice:Javascript proprietà prototype non funziona come previsto con i campi di array e oggetti
var TestModel, u, u2;
function TestModel() {}
TestModel.prototype.a = null;
TestModel.prototype.b = [];
u = new TestModel();
u.a = 1;
u.b.push(1);
u2 = new TestModel();
u2.a = 2;
u2.b.push(2);
console.log(u.a, u.b); // outputs: 1 [1,2]
console.log(u2.a, u2.b); // outputs: 2 [1,2]
Trovo sorprendente che u.b
e u2.b
contengono gli stessi valori, anche se ogni istanza di TestModel
dovrebbe avere le sue variabili di istanza in base a come ho configurato il prototipo. Quindi questo è l'output che mi aspettavo:
console.log(u.a, u.b); // expecting: 1 [1]
console.log(u2.a, u2.b); // expecting: 2 [2]
la stessa cosa accade se ho impostato b
ad essere un oggetto e impostare i tasti su di esso invece di usarlo come un array. Cosa non sto comprendendo qui?
Grazie mille! Non ero a conoscenza di quella sottile differenza. Quindi in pratica dovrei inizializzare tutte le variabili 'istanza' nel mio costruttore prima di manipolarle altrove. – hiddentao
@hiddentao: esattamente. È consentito assegnare i tipi primitivi alle proprietà di prototipo, come valori predefiniti, ma gli oggetti e gli array devono essere inizializzati nel costruttore se sono "per istanza". Normalmente definisco ancora la proprietà sul prototipo, ma la inizializzo con 'null' (come hai fatto con' TestModel.prototype.a'). –
@Felix, quale strumento stavi usando per ottenere quel bel grafico dei valori in TestModel? –