Je veux écrire ma propre fonction en JavaScript qui prend une méthode de rappel en tant que paramètre et l'exécute après l'achèvement. Je ne sais pas comment appeler une méthode dans ma méthode qui est passée en argument. Comme la réflexion.
exemple de code
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
});
Vous pouvez simplement l'appeler comme une fonction normale:
function myfunction(param1, callbackfunction)
{
//do processing here
callbackfunction();
}
La seule chose supplémentaire est de mentionner context. Si vous voulez pouvoir utiliser le mot clé this
dans votre rappel, vous devrez le définir. C'est souvent un comportement souhaitable. Par exemple:
function myfunction(param1, callbackfunction)
{
//do processing here
callbackfunction.call(param1);
}
Dans le rappel, vous pouvez maintenant accéder à param1
en tant que this
. Voir Function.call
.
Moi aussi, je suis entré dans le même scénario où je dois appeler la fonction envoyée en paramètre à une autre fonction.
J'ai essayé
mainfunction('callThisFunction');
Première approche
function mainFuntion(functionName)
{
functionName();
}
Mais aboutit à des erreurs. Alors j'ai essayé
Deuxième approche
functionName.call().
Toujours pas d'utilisation. Alors j'ai essayé
Troisième approche
this[functionName]();
qui a fonctionné comme un champion. Donc, ceci est juste d'ajouter une autre façon d'appeler. Peut-être y a-t-il un problème avec mes première et deuxième approches, mais au lieu de cela, je recherche plus de recherches et passe du temps.
function myfunction(param1, callbackfunction)
{
//do processing here
callbackfunction(); // or if you want scoped call, callbackfunction.call(scope)
}
Une autre méthode consiste à déclarer votre fonction en tant que fonction anonyme et à la sauvegarder dans une variable:
var aFunction = function () {
};
Après cela, vous pouvez passer une fonction en tant qu'argument ma fonction et l'appeler normalement.
function myfunction(callbackfunction) {
callbackfunction();
}
myfunction(aFunction);
Cependant, comme d'autres réponses l'ont souligné, ce n'est pas nécessaire, car vous pouvez utiliser directement le nom de la fonction. Je vais garder la réponse telle quelle, en raison de la discussion qui suit dans les commentaires.
Je vais faire quelque chose comme ça
var callbackfunction = function(param1, param2){
console.log(param1 + ' ' + param2)
}
myfunction = function(_function, _params){
_function(_params['firstParam'], _params['secondParam']);
}
Dans le bloc de code principal, il est possible de passer des paramètres
myfunction(callbackfunction, {firstParam: 'hello', secondParam: 'good bye'});
Tous les exemples ici semblent montrer comment le déclarer, mais pas comment l’utiliser. Je pense que c’est aussi pour cette raison que @Kiran a eu tant de problèmes.
L'astuce consiste à déclarer la fonction qui utilise un rappel:
function doThisFirst(someParameter, myCallbackFunction) {
// Do stuff first
alert('Doing stuff...');
// Now call the function passed in
myCallbackFunction(someParameter);
}
Le bit someParameter
peut être omis s'il n'est pas requis.
Vous pouvez ensuite utiliser le rappel comme suit:
doThisFirst(1, myOtherFunction1);
doThisFirst(2, myOtherFunction2);
function myOtherFunction1(inputParam) {
alert('myOtherFunction1: ' + inputParam);
}
function myOtherFunction2(inputParam) {
alert('myOtherFunction2: ' + inputParam);
}
Notez comment la fonction de rappel est passée et déclarée sans guillemets ni crochets.
doThisFirst(1, 'myOtherFunction1');
, cela échouera.doThisFirst(1, myOtherFunction3());
(je sais qu'il n'y a pas de paramètre entré dans ce cas), il appellera alors myOtherFunction3
first afin que vous obteniez des effets secondaires inattendus.