Czy ktoś może wyjaśnić mi to zachowanie. Pozwala zadeklarować klasę:Zachowanie dziedziczenia 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);
}
});
Teraz tworzę dwa obiekty
var a = Ext.create('baseClass');
var b = Ext.create('baseClass');
przetestować nieruchomość
a.setA(1);
b.setA(2);
a.sayA();
b.sayA();
ten wyprowadza
1
2
Wszystko jest OK, ale
a.add(1);
b.add(2);
a.sayAr();
b.sayAr();
Dostajemy
[1,2]
[1,2]
to ja nie rozumiem. Dlaczego używa dwóch oddzielnych właściwości "a", ale jednej "ar" dla obu obiektów. "ar" nie jest zadeklarowane jako statyczne! Nie rozumiem.
Dziękuję, czy możesz wyjaśnić, dlaczego działa on inaczej, niż łańcuchy/liczby/boolki? – mik
Nie czyni żadnego rozróżnienia, tylko że tablice/obiekty są typami "referencyjnymi". –
łańcuchy/liczby/boole są niezmiennymi typami danych. Jedynym sposobem manipulowania wartością jest ponowne przypisanie nowej wartości do odpowiedniej właściwości, która w większości przypadków zastosuje nową wartość jako element konkretnej instancji ('this.a =" mystring "'). Prototyp (udostępniony) pozostanie nietknięty. – mistaecko