Avevo parlato già di come realizzare il metodo shuffle() in Javascript e Actionscript. Mi sono accorto, tuttaavia, di non aver sottolineato che anche Actionscript è in grado di estendere, nel medesimo modo di Javascript, il proprio oggetto Array:
1 2 3 |
Questo codice può essere inserito anche all’interno di una classe, ad esempio nel costruttore:
1 2 3 4 5 6 7 8 9 |
Per usare poi tale “estensione” è sufficiente chiamare il meotodo shuffle() da qualsiasi istanza di un array:
1 2 |








7
Ciao, è da un po che leggo il tuo blog, che è molto ben curato e presenta un sacco di tips e idee non male. Devo chiederti una cosa su questo post, una cosa che non mi è chiara: che vantaggio c’è nell’estendere una classe tramite il parametro
prototype?Io in genere uso una classe
"MyArray extends Array", che implementa i metodi aggiuntivi che mi servono, e nei miei progetti istanzio quella. (Tanto grazie al polimorfismo le funzioni che vogliono un oggettoArrayla vedono come unArray)Utilizzando
prototypemi sembra di ‘sporcare’ il mio design a oggetti (e, a parte, dove andrebbe inserito per essere più elegante possibile? Nel costruttore della Document Class? )ti saluto, e ti ringrazio per le info
@Carlo:
Ciao Carlo, ottima osservazione! L’uso di
prototyperisale ai tempi in cui Actionscript non era ancora un linguaggio ad oggetti “maturo” come lo è la versione 3.0. Tuttavia, ancora oggi, l’uso diprototypesi differenzia dall’uso diextendsper creare una nuova classeArraypersonalizzata come hai indicato tu. Il vantaggio, infatti, risiede nella possibilità di estendere indistintamente tutti gliarray, senza dover specificare il tipo di classe. Nel metodo che hai usato tu, che va benissimo ed è corretto, l’uso di particolari metodi o proprietà rimane vincolato all’interno della tua classe (laMyArrayper intenderci). Con l’uso di prototype, invece, vengono estesi tutti gli array, anche quelli creati come:invece di scrivere
il vantaggio nell’uso o meno di
proptotypedipende dalla situazione, tuttavia in generale ci sono due motivi per preferireproptotypeall’uso di classi estese:-
proptotypemeno codice da scrivere; basta la definizione- codice già scritto ottiene l’estensione senza doverlo modificare
Il secondo punto, a mio avviso, è il più interessante. Infatti permette di estendere gli oggetti base di Actionscriopt (come
MovieClipoArray) su codice già scritto, senza doverlo modificare.Per quanto riguarda l’inserimento del codice, io uso un semplice file (tipo
array_ext.as) che includo nel costruttore delDocument Classo nel frame 0 a seconda del tipo di progetto.Spero di aver risposto ai tuoi quesiti… se hai altre domande non esitare a conttatarmi.