Qualcuno può spiegarmi questo comportamento. Consente dichiarare una classe:Comportamento ereditario ExtJs
Ext.define('baseClass',{
a:null,
ar:[],
add:function(v) {
this.ar.push(v);
},
sayAr:function() {
console.log(this.ar);
},
setA:function(v) {
this.a= v;
},
sayA:function() {
console.log(this.a);
}
});
Ora creo due oggetti
var a = Ext.create('baseClass');
var b = Ext.create('baseClass');
testare la proprietà
a.setA(1);
b.setA(2);
a.sayA();
b.sayA();
Emette
1
2
Tutto è OK, ma
a.add(1);
b.add(2);
a.sayAr();
b.sayAr();
otteniamo
[1,2]
[1,2]
Questo non capisco. Perché utilizza proprietà "a" separate ma una sola matrice "ar" per entrambi gli oggetti. "ar" non è dichiarato come statico! Non capisco affatto.
Grazie, puoi chiarire perché funziona in modo diverso con stringhe/numeri/bool – mik
Non fa alcuna distinzione, è solo che gli array/oggetti sono tipi di "riferimento". –
stringhe/numeri/bool sono tipi di dati immutabili. L'unico modo per manipolare il valore è riassegnare un nuovo valore alla proprietà rilevante, che nella maggior parte dei casi applicherà il nuovo valore come membro dell'istanza specifica ('this.a =" mystring "'). Il prototipo (condiviso) rimarrà intatto. – mistaecko