Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di iko82
    Registrato dal
    Apr 2007
    Messaggi
    63

    passaggio di arguments fra funzioni...

    Ciao, nel mio codice ho la necessità di passare l'array arguments da una funzione ad un'altra aggiungendo dei valori in coda all'array.

    codice:
    Utility = function() {
        arguments[arguments.length] = "id";
        return new MiaFunzione(arguments);
    }
    
    function MiaFunzione(args) {
        ......
    }


    codice:
    Utility("arg1", "arg2");
    La cosa strana che non mi son riuscito a spiegare è perchè all'interno della funzione MiaFunzione l'array args.length ha lunghezza 2 (invece di 3 dato che ho aggiunto il valore "id" in precedenza) ma all'indice args.length[2] riesco a recuperare correttamente il valore "id".
    In pratica è come se la proprietà length non si aggiornasse nonostante l'array abbia il contenuto corretto.
    Qualcuno mi sa spiegare l'arcano ?!?

    Grazie
    Ciao
    Fede

  2. #2
    Devi usare Array.prototype.push.call(arguments, "id"); ( con FF e IE funziona ).

    Il fatto è che arguments non è un array ma un oggetto; il fatto che sia molto simile ad un array non vuol dire che sia un array.
    Evidentemente il codice (nativo) del metodo push forza la sovrascrittura della length settandola al valore giusto, anche perchè poi la length è il valore che push deve ritornare.

  3. #3
    Utente di HTML.it L'avatar di iko82
    Registrato dal
    Apr 2007
    Messaggi
    63
    Originariamente inviato da Mega69
    Devi usare Array.prototype.push.call(arguments, "id"); ( con FF e IE funziona ).

    Il fatto è che arguments non è un array ma un oggetto; il fatto che sia molto simile ad un array non vuol dire che sia un array.
    Evidentemente il codice (nativo) del metodo push forza la sovrascrittura della length settandola al valore giusto, anche perchè poi la length è il valore che push deve ritornare.
    In effetti in questo modo nella funzione la length dell'array è corretta ma non ho ben capito cosa fa...
    In questo modo dovresti modificare il prototipo di Array inserendo ?!?! perchè la call??

  4. #4
    No, perchè dovrei modificare il prototipo di Array?

    Semplicemente in questo modo prendo in prestito il metodo degli Array push e lo uso su un oggetto che non è un array.

    call serve a richiamare una funzione, l'unica differenza con la normale chiamata di funzioni è che il primo argomento che passi diventa il this della funzione push.

    In altre parole call permette di usare il metodo push su un oggetto a piacere ( altrimenti sarebbe necessario assegnare la funzione all'oggetto e usarla come metodo ), in questo caso arguments.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.