2

zur Funktion I erstellen zwei Funktionen in der Lage suchen, BaseFunction und Callbackfunction wo BaseFunction in einem variablen Satz von Parametern als solche nimmt:Javascript - Pass variable Parameter

BaseFunction(arg1, arg2, ....) 
{ 
    //Call the Callback function here 
} 

und Callback-Funktion die gleichen Parameter empfängt zurück:

CallbackFunction(value, arg1, arg2, ...) 
{ 

} 

Wie kann ich die Parameter von der Basisfunktion an die Callback-Funktion übergeben?

Antwort

7

Verwenden apply eine Funktion mit einer Reihe von Parametern aufzurufen.

BaseFunction(arg1, arg2, ....) 
{ 
    // converts arguments to real array 
    var args = Array.prototype.slice.call(arguments); 
    var value = 2; // the "value" param of callback 
    args.unshift(value); // add value to the array with the others 
    CallbackFunction.apply(null, args); // call the function 
} 

DEMO: http://jsfiddle.net/pYUfG/

Für weitere Informationen über den arguments Wert, schauen mozilla's docs.

+0

Das hat perfekt funktioniert. Vielen Dank. – mrK

+0

Gern geschehen :-) –

0

Diese Art von funktioniert der Trick:

BaseFunction(arg1, arg2, ....) 
{ 
    CallbackFunction(value, arguments); 
} 

jedoch CallbackFunction Bedürfnisse Array akzeptieren:

CallbackFunction(value, argsArray) 
{ 
    //... 
} 
+0

Ja, das jetzt mein Rückfall ist. Ich würde es vorziehen, wenn es möglich wäre, es anders zu machen. – mrK

2

beliebige Anzahl von Argumenten zu übergeben:

function BaseFunction() { 
    CallbackFunction.apply({}, Array.prototype.slice.call(arguments)); 
} 
+0

Sie können 'Argumente' einfach" apply "übergeben, ohne" slice "darauf zu nennen. –

+1

@Rocket das wird nicht unbedingt auf allen Browsern funktionieren. Argumente ist ein Array-ähnliches Objekt, aber kein Array. Zum Beispiel hatte Firefox vor Version 4 einen Fehler, der nun behoben wurde und es Ihnen nicht erlaubte, ein Argument-Objekt zu übergeben. https://bugzilla.mozilla.org/show_bug.cgi?id=562448 – abresas

+0

Wahr, obwohl ich hoffe, dass die Leute die neuesten Versionen ihrer Browser haben. Die [Mozilla docs page for apply] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply) besagt, dass Sie ein Array-ähnliches Objekt übergeben können. BEARBEITEN: Macht nichts: '" Hinweis: Die meisten Browser, einschließlich Chrome 14 und Internet Explorer 9, akzeptieren immer noch keine arrayähnlichen Objekte und lösen eine Ausnahme aus. "'. –