>sarebbe una prorietà nascosta?
E' un discorso abbastanza lungo..
- prop1 è scritta direttamente nell'istanza, quindi la vedi nel debugger.
- prop2 è scritta nell'oggetto prototype della classe generante, quindi non la vedi nel debugger, ma la puoi leggere con il trace.
come funziona: quando richiedi una proprietà, l'oggetto la cerca in se stesso. se non la trova, la cerca nell'oggetto prototype della classe generante, e così via secondo l'ereditarietà.
codice:
function MyClass(prop1) {
this.prop1 = prop1;
}
MyClass.prototype.prop2 = "ciao";
MyClass.prototype.getProp = function(qualeProp) {
trace(this[qualeProp]);
};
MyClass.prototype.setProp = function(qualeProp, newProp) {
this[qualeProp] = newProp;
};
prova = new MyClass('by');
prova1 = new MyClass('hello');
// traccia "ciao", anche se non l'hai scritta
// direttamente nell'istanza
// questo perchè non trovandola in se stessa,
// la cerca nell'oggetto prototype della
// classe generante
prova.getProp('prop2');
quando scrivi:
codice:
prova.setProp('prop2', 'good');
stai "coprendo" la proprietà ereditata con una proprietà "locale", che quindi vedi nel debugger. Ma la proprietà ereditata è ancora lì a disposizione. Ad esempio:
codice:
function MyClass(){
// non faccio niente
};
MyClass.prototype.getProp = function(qualeProp) {
trace(this[qualeProp]);
};
MyClass.prototype.setProp = function(qualeProp, newProp) {
this[qualeProp] = newProp;
};
// setto l'ereditarietà
MyClass.prototype.prop = "ciao";
// creo l'istanza
prova = new MyClass();
// traccio prop, e mi appare "ciao"
// anche se non la vedo nel debugger
// e non l'ho scritta nell'istanza
prova.getProp('prop');
// a questo punto la setto nell'istanza
prova.setProp('prop', 'pippo');
// traccio prop, e mi appare "pippo"
// perchè ho coperto la proprietà
// ereditata, e quella locale viene
// trovata per prima.
// adesso la vedo nel debugger
prova.getProp('prop');
// cancello la proprietà locale
// e sparisce dal debugger
delete prova.prop
// traccio la proprietà, e mi appare
// di nuovo "ciao". questo perchè quella
// locale non esiste più, e allora
// viene ereditata
prova.getProp('prop');