Como señala Triptych, puede llamar a cualquier función de alcance global encontrándola en el contenido del objeto host.
Un método más limpio, que contamina mucho menos el espacio de nombres global, es poner explícitamente las funciones en una matriz directamente así:
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);
Esta matriz también podría ser una propiedad de algún objeto que no sea el objeto de host global, lo que significa que puede crear efectivamente su propio espacio de nombres como lo hacen muchas bibliotecas JS como jQuery. Esto es útil para reducir conflictos si / cuando incluye varias bibliotecas de utilidades separadas en la misma página, y (si otras partes de su diseño lo permiten) puede facilitar la reutilización del código en otras páginas.
También puede usar un objeto como este, que puede encontrar más limpio:
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);
Tenga en cuenta que con una matriz o un objeto, puede utilizar cualquier método de configuración o acceso a las funciones y, por supuesto, también puede almacenar otros objetos allí. Puede reducir aún más la sintaxis de cualquiera de los métodos para el contenido que no es tan dinámico mediante el uso de la notación literal JS así:
var dyn_functions = {
populate_Colours:function (arg1, arg2) {
// function body
};
, populate_Shapes:function (arg1, arg2) {
// function body
};
};
Editar: por supuesto, para bloques de funcionalidad más grandes, puede expandir lo anterior al "patrón de módulo" muy común, que es una forma popular de encapsular características de código de manera organizada.