L'oggetto Arguments

Nell’ambito della definizione di funzionipersonalizzate, può sorgere la necessità didover passare alla funzione un numero variabile di parametri(per esempio nel caso in cui si voglia calcolare la mediaaritmetica di un numero di valori che potrebbe variare ognivolta).
Quando si passano dei parametri alle funzioni, questivengono gestiti in background in un array chiamatoArguments.
Usando l’oggetto Arguments evitiamo di doverlidefinire ogni volta.

Facciamo un esempio per rendere più chiaro il concettoche sicuramente potrebbe risultare utile in molti casipratici.
Supponiamo di dover caricare un numero variabile di filmatiesterni in istanze di clip presenti nel filmato ricevente,istanze che chiameremo clip0_mc, clip1_mc, clip2_mc,clip3_mc, clip4_mc (possono essere naturalmente anche dipiù) ma non tutte ogni volta devono ricevere degliswf.
Nel nostro esempio abbiamo creato cinque filmati esterni(movie0.swf, movie1.swf, movie2.swf, movie3.swf, movie4.swf).

La prima operazione da fare è quella di creare unarray che fungerà da ‘libreria’ per tuttii riferimenti ai filmati esterni.
Si è supposto che gli swf si trovino nella stessaposizione del filmato ricevente.
 

mySwf = ["movie0.swf" , "movie1.swf" , "movie2.swf" , "movie3.swf" , "movie4.swf"];

Definiamo adesso le due funzioni che eseguiranno i comandiloadMovie e unloadMovie.
 

function loadSwf () {i = -1;while (++i < arguments.length) {loadMovie (arguments[i], this["clip" + i + "_mc"]);}}//function unloadSwf () {for (i in arguments) {unloadMovie (this["clip" + i + "_mc"]);}}


Come si può notare, tra le parentesi delle funzioninessun parametro è stato definito proprio per quelloche si diceva prima e cioè che i parametri passatialle funzioni vengono gestiti in backgroundnell’oggetto Arguments.
Non è poi difficile con un ciclo while, for sempliceo for..in, estrarre ciascun valore dall’arrayArguments.
Nell’esempio ho usato un ciclo while ed un ciclofor..in.
Adesso, è sufficiente decidere quali movie caricare epassare i relativi riferimenti dell’array mySwf allachiamata della funzione loadSwf, quindi saràsufficiente copiare ed incollare i riferimenti anche tra leparentesi della funzione unloadSwf ed il gioco èfatto.
Potremmo associare lo script di chiamata all’eventopress di due istanza di pulsanti, per esempio:

load_btn.onPress = function () {loadSwf (mySwf[0], mySwf[1], mySwf[2]);};unload_btn.onPress = function () {unloadSwf (mySwf[0], mySwf[1], mySwf[2]);};

Ogni volta che si dovranno caricare filmati diversi,sarà sufficiente modificare solo i riferimenti tra leparentesi delle chiamate delle funzioni, lasciando inalteratele relative definizioni.

Il codice completo è questo:
 

mySwf = ["movie0.swf" , "movie1.swf" , "movie2.swf" , "movie3.swf" , "movie4.swf"];//function loadSwf () {i = -1;while (++i < arguments.length) {loadMovie (arguments[i], this["clip" + i + "_mc"]);}}//function unloadSwf () {for (i in arguments) {unloadMovie (this["clip" + i + "_mc"]);}}//load_btn.onPress = function () {loadSwf (mySwf[0], mySwf[1], mySwf[2], mySwf[3], mySwf[4]);};//unload_btn.onPress = function () {unloadSwf (mySwf[0], mySwf[1], mySwf[2], mySwf[3], mySwf[4]);};