Comme le souligne Triptych, vous pouvez appeler n'importe quelle fonction de portée 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, 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é d'un objet autre que l'objet hôte global, ce qui signifie que vous pouvez effectivement créer votre propre espace de noms, comme le font de nombreuses bibliothèques JS telles que jQuery. Cela permet de réduire les conflits lorsque vous incluez plusieurs bibliothèques utilitaires distinctes dans la même page et (si d'autres éléments de votre conception le permettent) de faciliter la réutilisation du code dans d'autres pages.
Vous pouvez également utiliser un objet comme celui-ci, ce qui vous semblera peut-être 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 pour définir les fonctions ou y accéder, et vous pouvez bien sûr y stocker d'autres objets. Vous pouvez encore réduire la syntaxe de l'une ou l'autre méthode pour un contenu qui n'est pas très dynamique en utilisant la notation littérale JS comme suit :
var dyn_functions = {
populate_Colours:function (arg1, arg2) {
// function body
};
, populate_Shapes:function (arg1, arg2) {
// function body
};
};
Modification : bien entendu, pour les blocs de fonctionnalités plus importants, vous pouvez étendre ce qui précède au "modèle de module" très courant, qui est un moyen populaire d'encapsuler les caractéristiques du code d'une manière organisée.