Possible en double:
How can I pre-set arguments in JavaScript function call? (Partial Function Application)Comment passer une référence à une fonction, avec des paramètres?
Je dois pouvoir passer une référence à une fonction avec un ensemble de paramètres.
Voici un exemple de passer une référence sans paramètres:
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
Maintenant, ce que je dois faire est de passer la même fonction f
, mais cette fois je aurais besoin de passer des paramètres à la référence. Maintenant, je peux le faire avec une fonction anonyme et appeler la fonction f
avec des paramètres dans la fonction nouvellement créée, comme par exemple:
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
Mais ma question est, est-il un moyen de passer une référence directe à la f
fonction Avec les paramètres à fr
, mais sans l'enfermer dans une fonction anonyme?
Que dois-je attribuer à fr
pour le rendre invocable sans paramètres (fr()
), de sorte que f (1,2,3) est exécutée lorsque fr
est invoquée?
[UPDATE] J'ai suivi la réponse de Jason Bunting à here sur le Fonction partielle et la fonction JavaScript il des messages, il est exactement ce que je cherchais. Voici la solution:
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);
};
}
Pour une raison quelconque, j'ai eu des ennuis avec la première instruction (var args = Array.prototype.slice.call (arguments) .splice (1);) et a dû utiliser à la place: var args = new Array(); pour (var i = 1; i
juste au cas où quelqu'un aurait besoin de ceci: 'Function.prototype.pass = function() { var args = arguments, func = this; return function() {func.apply (this, args);} }; ' –