web-dev-qa-db-fra.com

Comment exécuter une méthode passée en paramètre à function

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
});
51
Muhammad Ummar

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 .

78
lonesomeday

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. 

4
Kiran
function myfunction(param1, callbackfunction)
{
    //do processing here
   callbackfunction(); // or if you want scoped call, callbackfunction.call(scope)
}
2
Roki

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.

0
stivlo

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'});
0
jcromeros1987

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.

  • Si vous utilisez doThisFirst(1, 'myOtherFunction1');, cela échouera.
  • Si vous utilisez doThisFirst(1, myOtherFunction3()); (je sais qu'il n'y a pas de paramètre entré dans ce cas), il appellera alors myOtherFunction3first afin que vous obteniez des effets secondaires inattendus.
0
SharpC