javascript - validacion - Cómo ejecutar un método pasado como parámetro para funcionar
validar formulario javascript antes de enviar (7)
Quiero escribir mi propia función en JavaScript que toma un método de devolución de llamada como parámetro y lo ejecuta después de la finalización, no sé cómo invocar un método en mi método que se pasa como argumento. Como la reflexión
código de ejemplo
function myfunction(param1, callbackfunction)
{
//do processing here
//how to invoke callbackfunction at this point?
}
//this is the function call to myfunction
myfunction("hello", function(){
//call back method implementation here
});
Haré algo como esto
var callbackfunction = function(param1, param2){
console.log(param1 + '' '' + param2)
}
myfunction = function(_function, _params){
_function(_params[''firstParam''], _params[''secondParam'']);
}
En el bloque de código principal, es posible pasar parámetros
myfunction(callbackfunction, {firstParam: ''hello'', secondParam: ''good bye''});
Otra forma es declarar su función como función anónima y guardarla en una variable:
var aFunction = function () {
};
Después de eso, puede pasar una función como argumento a mi función y llamarla normalmente.
function myfunction(callbackfunction) {
callbackfunction();
}
myfunction(aFunction);
Sin embargo, como han señalado otras respuestas, no es necesario, ya que puede usar directamente el nombre de la función. Mantendré la respuesta como está, debido a la discusión que sigue en los comentarios.
Puedes simplemente llamarlo como una función normal:
function myfunction(param1, callbackfunction)
{
//do processing here
callbackfunction();
}
Lo único adicional es mencionar el contexto . Si desea poder utilizar la palabra clave this
dentro de su devolución de llamada, tendrá que asignarla. Este es un comportamiento frecuentemente deseable. Por ejemplo:
function myfunction(param1, callbackfunction)
{
//do processing here
callbackfunction.call(param1);
}
En la devolución de llamada, ahora puede acceder a param1
como this
. Ver Function.call
.
Todos los ejemplos aquí parecen mostrar cómo declararlo, pero no cómo usarlo. Creo que también es por eso que @Kiran tenía tantos problemas.
El truco es declarar la función que usa una devolución de llamada:
function doThisFirst(someParameter, myCallbackFunction) {
// Do stuff first
alert(''Doing stuff...'');
// Now call the function passed in
myCallbackFunction(someParameter);
}
El bit someParameter
se puede omitir si no se requiere.
A continuación, puede usar la devolución de llamada de la siguiente manera:
doThisFirst(1, myOtherFunction1);
doThisFirst(2, myOtherFunction2);
function myOtherFunction1(inputParam) {
alert(''myOtherFunction1: '' + inputParam);
}
function myOtherFunction2(inputParam) {
alert(''myOtherFunction2: '' + inputParam);
}
Observe cómo se transfiere la función de devolución de llamada y se declara sin comillas o corchetes .
- Si usa
doThisFirst(1, ''myOtherFunction1'');
fallará - Si usa
doThisFirst(1, myOtherFunction3());
(Sé que no hay entrada de parámetros en este caso), llamará amyOtherFunction3
primero para que pueda obtener efectos secundarios no deseados.
Yo también entré en el mismo escenario donde tengo que llamar a la función enviada como parámetro a otra función.
Lo intenté
mainfunction(''callThisFunction'');
Primer enfoque
function mainFuntion(functionName)
{
functionName();
}
Pero termina en errores. Así que lo intenté
Segundo enfoque
functionName.call().
Todavía no uso Así que lo intenté
Tercer enfoque
this[functionName]();
que funcionó como un campeón. Entonces, esto es solo agregar una forma más de llamar. Puede que haya un problema con mi primer y segundo enfoque, pero en lugar de buscar en Google más y gastar tiempo fui para el tercer enfoque.
object[functionName]();
objeto: se refiere al nombre del objeto.
functionName: es una variable cuyo valor usaremos para llamar a una función.
al poner la variable utilizada para referirse al nombre de la función dentro de [] y () fuera del paréntesis, podemos llamar dinámicamente la función del objeto usando la variable. La notación de puntos no funciona porque cree que ''nombre de función'' es el nombre real de la función y no el valor que ''nombre de función'' contiene. Esto me volvió loco un poco, hasta que encontré este sitio. Estoy contento de que .com exista <3
function myfunction(param1, callbackfunction)
{
//do processing here
callbackfunction(); // or if you want scoped call, callbackfunction.call(scope)
}