2010-06-25 9 views
9

Ich denke, ich brauche etwas wie Ruby's splat * hier.Javascript: Forwarding Funktionsaufrufe, die variable Anzahl von Argumenten

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); 

Ich möchte diese "123" zurückzukehren, sondern bekomme ich "[object Arguments]". Das macht Sinn, nehme ich an. Es übergibt das Objekt, das die Argumente darstellt, aber nicht die Argumente einzeln.

Also, wie kann ich einfach eine beliebige Anzahl von Argumenten an eine andere Funktion weiterleiten, die eine beliebige Anzahl von Argumenten akzeptiert?

Antwort

19

richtig auf die Argumente an eine andere Funktion übergeben, Sie apply verwenden müssen:

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

Die apply Methode hat zwei Parameter, die erste die thisObj ist, wird der Wert als der this Wert verwendet werden Wenn Sie in der aufgerufenen Funktion null oder undefined verwenden, bezieht sich der Wert this innerhalb der Funktion auf das globale Objekt.

Das zweite Argument, das apply erwartet, ist ein array-ähnliches Objekt, das die Argumente enthält, die auf die Funktion angewendet werden.

Überprüfen Sie das obige Beispiel here.

3

Versuchen Sie diese return foo.apply(this,arguments). Sie können auch Array.prototype.slice.apply(arguments).join('') für Ihre Foo-Funktion verwenden.

Verwandte Themen