138 votes

Comment appeler une méthode nommée dynamiquement en Javascript ?

Je travaille sur la création dynamique de JavaScript qui sera inséré dans une page web au fur et à mesure de sa construction.

Le JavaScript sera utilisé pour remplir un listbox sur la base de la sélection dans un autre listbox . Lorsque la sélection d'un listbox est modifié, il appellera le nom d'une méthode en fonction de la valeur sélectionnée dans le champ listbox .

Par exemple :

Listbox1 contient :

  • Colours
  • Shapes

Si Colours est sélectionné, il appellera un populate_Colours qui remplit une autre méthode listbox .

Pour clarifier ma question : Comment faire pour que populate_Colours en JavaScript ?

6voto

Tim Moses Points 409

Je ne recommanderais pas d'utiliser la fenêtre comme le suggèrent certaines des autres réponses. Utiliser this et le champ d'application en conséquence.

this['yourDynamicFcnName'](arguments);

Une autre astuce consiste à faire des appels à l'intérieur de différents champs d'application et à les utiliser pour l'héritage. Supposons que vous ayez imbriqué la fonction et que vous souhaitiez accéder à l'objet global de la fenêtre. Vous pourriez faire ceci :

this['yourDynamicFcnName'].call(window, arguments);

3voto

dılo sürücü Points 1989

Il suffit de le faire

class User

  getName() 
  {   

    return "dilo";
   }

}

let user =new User();
let dynamicMethod='getName';
console.log(user[dynamicMethod]()); //dilo

1voto

mathi Points 176

Bonjour, essayez ceci,

 var callback_function = new Function(functionName);
 callback_function();

il gérera lui-même les paramètres.

0voto

El Amrani Shakir Points 146

Une fonction simple pour appeler une fonction dynamiquement avec des paramètres :

this.callFunction = this.call_function = function(name) {
    var args = Array.prototype.slice.call(arguments, 1);
    return window[name].call(this, ...args);
};

function sayHello(name, age) {
    console.log('hello ' + name + ', your\'e age is ' + age);
    return some;
}

console.log(call_function('sayHello', 'john', 30)); // hello john, your'e age is 30

0voto

BlackFire Points 368

Essayez-les

Appeler des fonctions avec des noms dynamiques, comme ceci :

let dynamic_func_name = 'alert';
(new Function(dynamic_func_name+'()'))()

avec des paramètres :

let dynamic_func_name = 'alert';
let para_1 = 'HAHAHA';
let para_2 = 'ABCD';
(new Function(`${dynamic_func_name}('${para_1}','${para_2}')`))()

Exécuter le code dynamique :

let some_code = "alert('hahaha');";
(new Function(some_code))()

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