71 votes

Comment exécuter une méthode passée en paramètre d'une fonction ?

Je veux écrire ma propre fonction en JavaScript qui prend une méthode de rappel comme paramètre et l'exécute après l'achèvement, je ne sais pas comment invoquer une méthode dans ma méthode qui est passée comme un argument. Comme Reflection.

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
});

0voto

jcromeros1987 Points 137

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

0voto

stivlo Points 28997

Une autre solution consiste à déclarer votre fonction comme une fonction anonyme et à l'enregistrer dans une variable :

var aFunction = function () {
};

Après cela, vous pouvez passer aFunction comme argument myfunction 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, puisque 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.

1 votes

Cette question porte sur la façon dont myfunction peut appelez la fonction de rappel qui lui est transmise, et non l'appel à la myfunction comme un rappel. Mais même si c'était le cas, il n'y a aucune raison de rendre la fonction anonyme. Vous pouvez utiliser le symbole myfunction pour faire référence à la fonction dans les deux cas. (Et en la rendant anonyme empêche vos outils de vous aider .)

0 votes

Ok, j'ai édité la question pour intervertir les noms, je lis votre article, merci pour le pointeur.

0 votes

Encore une fois : Vous n'avez pas besoin de la callbackfunction doit être anonyme afin de pouvoir l'utiliser en tant que callback. (Il puede être si vous voulez, mais il n'a pas besoin de l'être). Votre réponse donne encore la forte impression que c'est le cas. Elle utilise également deux callbackfunction (l'un d'eux étant une variable, l'autre un argument de fonction), ce qui prête à confusion.

-1voto

Ross Points 63

Mise en œuvre très basique pour mon cas d'utilisation, basée sur d'excellentes réponses et ressources ci-dessus :

/** Returns the name of type member in a type-safe manner. **(UNTESTED)** e.g.:
*
* ```typescript
* nameof<Apple>(apple => apple.colour); // Returns 'colour'
* nameof<Apple>(x => x.colour); // Returns 'colour'
* ```
*/
export function nameof<T>(func?: (obj: T) => any): string {
 const lambda = ' => ';
 const funcStr = func.toString();

 const indexOfLambda = funcStr.indexOf(lambda);
 const member = funcStr.replace(funcStr.substring(0, indexOfLambda) + '.', '').replace(funcStr.substring(0, indexOfLambda) + lambda, '');

 return member;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X