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


Answers

Comme le souligne Triptych, vous pouvez appeler n'importe quelle fonction d'étendue globale en la trouvant dans le contenu de l'objet hôte.

Une méthode plus propre, qui pollue beaucoup moins l'espace de noms global, consiste à placer explicitement les fonctions dans un tableau directement comme suit:

var dyn_functions = [];
dyn_functions['populate_Colours'] = function (arg1, arg2) { 
                // function body
           };
dyn_functions['populate_Shapes'] = function (arg1, arg2) { 
                // function body
           };
// calling one of the functions
var result = dyn_functions['populate_Shapes'](1, 2);
// this works as well due to the similarity between arrays and objects
var result2 = dyn_functions.populate_Shapes(1, 2);

Ce tableau peut également être une propriété de certains objets autres que l'objet hôte global, ce qui signifie que vous pouvez créer votre propre espace de noms comme le font beaucoup de bibliothèques JS comme jQuery. Ceci est utile pour réduire les conflits si / quand vous incluez plusieurs bibliothèques utilitaires séparées dans la même page, et (d'autres parties de votre conception le permettent) peut faciliter la réutilisation du code dans d'autres pages.

Vous pouvez également utiliser un objet comme celui-ci, que vous pourriez trouver plus propre:

var dyn_functions = {};
dyn_functions.populate_Colours = function (arg1, arg2) { 
                // function body
           };
dyn_functions['populate_Shapes'] = function (arg1, arg2) { 
                // function body
           };
// calling one of the functions
var result = dyn_functions.populate_Shapes(1, 2);
// this works as well due to the similarity between arrays and objects
var result2 = dyn_functions['populate_Shapes'](1, 2);

Notez qu'avec un tableau ou un objet, vous pouvez utiliser l'une ou l'autre méthode de définition ou d'accès aux fonctions, et vous pouvez bien entendu y stocker d'autres objets. Vous pouvez encore réduire la syntaxe de l'une ou l'autre méthode pour contant qui n'est pas synamique en utilisant la notation littérale JS comme ceci:

var dyn_functions = {
           populate_Colours:function (arg1, arg2) { 
                // function body
           };
         , populate_Shapes:function (arg1, arg2) { 
                // function body
           };
};

Éditer: bien sûr, pour de plus grands blocs de fonctionnalités, vous pouvez étendre ce qui précède au très courant "modèle de module" qui est un moyen populaire d'encapsuler les fonctionnalités de code d'une manière organisée.

Question

Je travaille sur la création dynamique de Javascript qui sera inséré dans une page web en cours de construction.

Le Javascript sera utilisé pour remplir une liste en fonction de la sélection dans une autre zone de liste. Lorsque la sélection d'une zone de liste est modifiée, elle appelle un nom de méthode basé sur la valeur sélectionnée de la zone de liste.

Par exemple:

Listbox1 contient:

Couleurs
Formes

Si 'Couleurs' est sélectionné, il appelle une méthode "populate_Colours" qui remplit une autre zone de liste.
Pour clarifier ma question: comment est-ce que je fais cet appel "populate_Colours" en Javascript?




Salut, essaye ça,

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

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




Essayez avec ceci:

var fn_name = "Colours",
fn = eval("populate_"+fn_name);
fn(args1,argsN);



Links