Duplicar posible:
How can I pre-set arguments in JavaScript function call? (Partial Function Application)¿Cómo puedo pasar una referencia a una función, con parámetros?
necesito poder pasar una referencia a una función con un conjunto dado de parámetros.
Aquí es un ejemplo de que pasa una referencia sin parámetros:
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
Ahora lo que tengo que hacer es pasar la misma función f
, pero esta vez tendría que pasar parámetros al referencia. Ahora, puedo hacerlo con una función anónima e invoco la función f
con los parámetros dentro de la función de nueva creación, como por ejemplo:
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
Pero mi pregunta es, ¿Hay una manera de pasar una referencia directa a la f
función Con los parámetros a fr
, pero sin encerrarlo en una función anónima?
¿Qué necesito para asignar a fr
para que sea invocable sin parámetros (fr()
), por lo que se ejecuta f (1,2,3) cuando se invoca fr
?
[ACTUALIZACIÓN] que siguieron Jason Bunting 's respuesta a here acerca de la función parcial y la función de JavaScript que los mensajes no es exactamente lo que estaba buscando. Aquí está la solución:
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);
};
}
Por alguna razón, tuve problemas con la primera declaración (args var = Array.prototype.slice.call (argumentos) .splice (1);) y tuvo que usar esto en su lugar: var args = new Array(); para (var i = 1; i
por si alguien necesita esto: 'Function.prototype.pass = function() { var args = arguments, func = this; return function() {func.apply (this, args);} }; ' –