Ho un piccolo problema di comprensione, nonchè di conseguente utilizzo, su quella che è la logica di prototype
Dopo avere letto centinaia di opinioni su quale sia il metodo migliore pr implementare l'ereditarietà (per es. sottoclasse.prototype.__proto__=superclasse.protot ype oppure sottoclasse.prototype = new superclasse() ??) ero finalmente giunto ad una conclusione del tutto personale. Se mi serve che il costruttore della superclasse venga avviato, userò il codice che prevede "new", altrimenti utilizzo il prototype.__proto__
Con il secondo metodo in pratica la sottoclasse eredita tutto dal prototipo della superclasse. Una vera e propria catena di ereditarietà.
Ora, siccome con il codice sottoclasse.prototype.__proto__=superclasse.protot ype stabilisco uan catena di ereditarietà, mi aspettavo che inserendo nel codice del costruttore della sottoclasse un richiamo al costruttore delal superclasse, usando super(), il coastruttore della sueprclasse venisse istanziato. Ed invece no. Per spiegarmi, ecco un codice di esempio:
superclasse = function() {
trace("costruttore superclasse")
}
superclasse.prototype.variabile=10;
sottoclasse = function() {
super();
trace("costruttore sottoclasse")
}
sottoclasse.prototype.__proto=superclasse.prototyp e;
esempio= new sottoclasse();
trace(esempio.variabile);

L'output è il seguente:
costruttore sottoclasse
10
In pratica la variabile è presente nelal sottoclasse perchè il codice sottoclasse.prototype.__proto=superclasse.prototyp e ha stabilito l'ereditarietà, il costruttore della sotoclasse viene ovviamente chiamato ma prima non viene istanziato il costruttore della superclasse. Cosa che invece dovrebbe avvenire.
Ora, secondo il manauel macromedia, il codice funziona se, invece di scrivere "sottoclasse.prototype.__proto=superclasse.prototy pe;" io scrivo "sottoclasse.prototype=new superclasse();"
Così facendo, però, secondo qualcuno si ha una creazioen inutile di una istanza delal superclasse in un momento in cui in effetti non mi serve e di conseguenza, per progetti gorssi, si potrebbe richiedere inutilmente uno sforzo alla CPU nel creare queste istanze della sueprclasse.
Inoltre, seguendo il codice macromedia, ottengo un output quando non lo vorrei (mentre sto creando la catena di ereditarietà ma ancora non ho creato nessuna istanza della sottoclasse) ed in più, siccome uso super() nel costruttore della sottoclasse, mi ritrovo a richiamare due volte il costruttore delal superclasse. Cosa che non voglio. Unica soluzione è utilizzare il codice "new superclasse()" elimiando "super()". Però, così facendo, resta il problema della creazione di una istanza di superclasse quando a me ancora non serve (non esiste ancora una istanza delal sottoclasse e quindi non mi serve che vanga avviato il costruttore si quelal da cui essa eredita).
qualcuno sa come mai il codice che ho indicato all'inizio non funziona? Dov'è l'errore? In linea teorica, una volta creata una catena di ereditarietà, super(9 dovrebbe puntare senza problemi al costruttore della classe superiore, ma così non è. Ed ho il dubbio, che snoo sicuro qualcunio mi confermerà, che quesot dipenda dal fatto che Actionscript non è - in realtà - un vero linguaggio ad oggetti ma solo "orientato agli oggetti".
Chi sa dirmi come sta veramente la questione????

mandp