2010-06-25 12 views
9

Penso di aver bisogno di qualcosa come lo splat di rubino * qui.Javascript: chiamate di funzione di inoltro che accettano un numero variabile di argomenti

function foo() { 
    var result = ''; 
    for (var i = 0; i < arguments.length; i++) { 
    result += arguments[i]; 
    } 
    return result; 
} 

function bar() { 
    return foo(arguments) // this line doesn't work as I expect 
} 

bar(1, 2, 3); 

Voglio che questo per tornare "123", ma invece ottengo "[object Arguments]". Il che ha senso, suppongo. Passa l'oggetto che rappresenta gli argomenti, ma non gli argomenti individualmente.

Quindi, come posso semplicemente inoltrare un numero qualsiasi di argomenti a un'altra funzione che richiede un numero qualsiasi di argomenti?

risposta

19

corretto passaggio argomenti a un'altra funzione, è necessario utilizzare apply:

function bar() { 
    return foo.apply(null, arguments); 
} 

Procedimento apply prende due parametri, il primo è il thisObj, il valore di esso verrà utilizzato come valore this all'interno della funzione invocata, se si utilizza null o undefined, il valore this all'interno della funzione farà riferimento all'oggetto globale.

Il secondo argomento che si aspetta apply è un oggetto di tipo array che contiene gli argomenti da applicare alla funzione.

Verificare l'esempio sopra riportato here.

3

Prova questo return foo.apply(this,arguments). Inoltre puoi semplicemente usare Array.prototype.slice.apply(arguments).join('') per la tua funzione foo.

Problemi correlati