¿Es posible pasar una función de JavaScript con parámetros como parámetro?
Ejemplo:
$(edit_link).click( changeViewMode( myvar ) );
¿Es posible pasar una función de JavaScript con parámetros como parámetro?
Ejemplo:
$(edit_link).click( changeViewMode( myvar ) );
Respuestas:
Use un "cierre":
$(edit_link).click(function(){ return changeViewMode(myvar); });
Esto crea un contenedor de funciones temporal anónimo que conoce el parámetro y lo pasa a la implementación real de devolución de llamada.
this.myFunction = this.myFunction.bind(this)en su constructormétodo. Pero, como dijiste, cuando tienes que pasar diferentes contextos para cada uno, como todas las filas diferentes en las que haces clic para abrir la página de detalles de esa fila, no es evitable.
Uso Function.prototype.bind(). Citando a MDN:
El
bind()método crea una nueva función que, cuando se llama, tiene suthispalabra clave establecida en el valor proporcionado, con una secuencia dada de argumentos que precede a cualquier proporcionado cuando se llama a la nueva función.
Es compatible con todos los principales navegadores, incluido IE9 +.
Su código debería verse así:
$(edit_link).click(changeViewMode.bind(null, myvar));
Nota al margen: supongo que está en un contexto global, es decir, la thisvariable es window; de lo contrario, use en thislugar de null.
$.ajax(url).done(handler.bind(this, var1, var2));
Sí, así:
$(edit_link).click(function() { changeViewMode(myvar) });
O si está utilizando es6, debería poder utilizar una función de flecha
$(edit_link).click(() => changeViewMode(myvar));
Puedes hacerlo
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
y entonces
function activate(callback){
callback && callback();
}
activate(callback);
O si su devolución de llamada contiene una lógica más flexible, puede pasar el objeto.
Este es un ejemplo siguiendo el enfoque de Ferdinand Beyer:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
En este ejemplo, el "valor del parámetro" se pasa de la función1 a la función3 a través de la función2 utilizando un ajuste de función.