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 directement comme ceci:
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 créer efficacement votre propre espace de noms comme le font de nombreuses bibliothèques JS telles que jQuery. Ceci est utile pour réduire les conflits si / lorsque vous incluez plusieurs bibliothèques d'utilitaires distinctes dans la même page, et (si 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 soit la méthode de paramétrage, soit l'accès aux fonctions, et vous pouvez bien sûr y stocker d'autres objets. Vous pouvez réduire davantage la syntaxe de l'une ou l'autre méthode pour un contenu qui n'est pas aussi 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
};
};
Edit: bien sûr, pour des blocs de fonctionnalités plus volumineux, vous pouvez étendre ce qui précède au "modèle de module" très courant qui est une manière populaire d'encapsuler les fonctionnalités du code de manière organisée.