Mögliche Duplizieren:
How can I pre-set arguments in JavaScript function call? (Partial Function Application)Wie kann ich einen Verweis auf eine Funktion mit Parametern übergeben?
Ich muss in der Lage einen Verweis auf eine Funktion mit einem bestimmten Satz von Parametern übergeben. Hier
ist ein Beispiel für Sie als Referenz ohne Parameter:
var f = function() {
//Some logic here...
};
var fr = f; //Here I am passing a reference to function 'f', without parameters
fr(); //the 'f' function is invoked, without parameters
Nun, was ich tun müssen, ist die gleiche f
Funktion übergeben, aber dieses Mal habe ich müsste Parameter die passieren Referenz. Jetzt kann ich es mit einer anonymen Funktion tun und rufen Sie die f
Funktion mit Parametern innerhalb der neu geschaffenen Funktion, wie solche:
var f = function() {
//Some logic here...
};
var fr = function (pars) {
f(pars);
}; //Here I am creating an anonymous function, and invoking f inside it
fr({p : 'a parameter'}); //Invoking the fr function, that will later invoke the f function with parameters
Aber meine Frage ist, Gibt es eine Möglichkeit, einen direkten Bezug auf das passieren f
Funktion Mit Parametern zu fr
, aber ohne es in einer anonymen Funktion einzuschließen?
Was muss ich fr
zuweisen, um es ohne Parameter machen aufrufbaren (fr()
), so dass f (1,2,3) ausgeführt wird, wenn fr
aufgerufen wird?
[UPDATE] Ich folgte Jason Bunting ‚s Antwort auf here über die Teilfunktion und die JavaScript-Funktion er Beiträge es ist genau das, was ich suchte. Hier ist die Lösung:
function partial(func /*, 0..n args */) {
var args = Array.prototype.slice.call(arguments).splice(1);
return function() {
var allArguments = args.concat(Array.prototype.slice.call(arguments));
return func.apply(this, allArguments);
};
}
Aus irgendeinem Grund hatte ich Probleme mit der ersten Anweisung (var args = Array.prototype.slice.call (Argumente) .splice (1);) und musste dies stattdessen verwenden: var args = new Array(); für (var i = 1; i
nur für den Fall, dass jemand dies benötigt: 'Function.prototype.pass = function() { var args = Argumente, func = this; return function() {func.apply (this, args);} }; ' –