Come sottolinea Trittico, è possibile chiamare qualsiasi funzione di ambito globale trovandola nel contenuto dell'oggetto host.
Procedimento pulitore, che inquina namespace globale molto meno, è quello di mettere esplicitamente le funzioni in un array direttamente con:
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);
Questa matrice potrebbe anche essere una proprietà di un oggetto diverso da quello globale oggetto host significa che puoi creare efficacemente il tuo spazio dei nomi come fanno molte librerie JS come jQuery. Ciò è utile per ridurre i conflitti se/quando si includono più librerie di utilità separate nella stessa pagina e (altre parti del progetto permettendo) può rendere più facile il riutilizzo del codice in altre pagine.
Si potrebbe anche usare un oggetto in questo modo, che si potrebbe trovare più pulito:
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);
Si noti che sia con un array o un oggetto, è possibile utilizzare entrambi i metodi di impostazione o accedere alle funzioni, e può ovviamente memorizza anche altri oggetti. È possibile ridurre ulteriormente la sintassi di entrambi i metodi per contant che non è quella Synamic utilizzando la notazione letterale JS in questo modo:
var dyn_functions = {
populate_Colours:function (arg1, arg2) {
// function body
};
, populate_Shapes:function (arg1, arg2) {
// function body
};
};
Edit: ovviamente per i più grandi blocchi di funzionalità è possibile espandere la sopra per il molto comune "modello di modulo" che è un modo popolare per incapsulare le caratteristiche del codice in modo organizzato.
I' d sconsigliamo questo in favore di avere filiali locali in un unico metodo "popolare". Lo renderebbe più testabile e sembrerebbe meno "hacky" –
vedere la mia risposta qui. [chiama per nome in javascript] (https://stackoverflow.com/a/46090820/7771019) –