[Web2.0] Domanda su prototype

Gianluca Baù gianluca a ihuri.it
Lun 22 Gen 2007 16:09:37 CET


>
> On 19/gen/07, at 19:17, Davide Michel 'ZioBudda' Morelli wrote:
>
>>>>>   Devi usare una closure. Crea una lambda function nella quale
>>>>>referenzi i parametri che manterranno i loro valori.
>>>>>      
>>>>>
>>>>Che per ignoranti si traduce in ???
>>>>    
>>>>
>>>ROTFL :-)  
>>>      
>>>
>> In verità ho mezzo capito cosa dice, pero' voglio essere sicuro di 
>> aver capito. 
>
>
> Non ho prototype sotto mano, ma l'esempio è generico, e si risolve in 
> questo modo. Se non ho parametri da passare, la situazione è la seguente:
>
> function AjaxStub(cb) { cb(); }
>
> function FunctionWithoutParameters() {
> alert("FunctionWithoutParameters");
> }
>
> function Do() {
> AjaxStub(FunctionWithoutParameters);
> }
> Do();
>
> Chiamando Do() viene simulata una richiesta Ajax con una callback (che 
> in questo caso viene chiamata subito). La funzione di callback non 
> accetta parametri, e tutto funziona senza problemi. Ora, supponiamo di 
> voler passare dei parametri alla Do() e che questi parametri debbano 
> essere passati alla funzione di callback. Devo quindi creare una 
> funzione lambda che sfruttando ilprincipio delle closure porti con sé 
> anche i due parametri:
>
> function AjaxStub(cb) { cb(); }
>
> function FunctionWithParameters(p1, p2) {
> alert("FunctionWithParameters: [" + p1 + "] [" + p2 + "]");
> }
>
> function Do(p1, p2) {
> AjaxStub(function () { FunctionWithParameters(p1, p2); } );
> }
>
> Do('primo', 'secondo');
>
> In pratica, oltre ad avere funzioni che accettano parametri, la parte 
> importante è quella in cui viene passata la funzione di callback. Non 
> più direttamente la funzione, ma una funzione costruita al volo. 
> All'interno di questa funzione vengono referenziate le due variabili 
> p1 e p2, che nello scope corrente corrispondono proprio ai parametri 
> passati alla funzione Do().
>
> Ovviamente l'esempio è stato fatto con due soli parametri, ma è 
> immediatamente estendibile a n parametri.
>
> Testato su Safari.
>
> Cris
>
>
> -- 
> Cristiano Verondini
>
>  
>
Benissimo, questa era la soluzione giusta.

Grazie mille per l'aiuto, a tutti comunque :)


Maggiori informazioni sulla lista Web2.0