Jak wskazuje Triptych, możesz wywołać dowolną funkcję zasięgu globalnego, znajdując ją w zawartości obiektu hosta.
Czystszą metodą, która znacznie mniej zanieczyszcza globalną przestrzeń nazw, jest jawne umieszczenie funkcji w tablicy bezpośrednio, tak jak pokazano poniżej:
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);
Ta tablica może również być właściwością jakiegoś obiektu innego niż globalny obiekt hosta, co oznacza, że możesz efektywnie tworzyć własną przestrzeń nazw, tak jak robi to wiele bibliotek JS, takich jak jQuery. Jest to przydatne do zmniejszania konfliktów, jeśli / kiedy umieścisz wiele oddzielnych bibliotek narzędzi na tej samej stronie i (jeśli pozwalają na to inne części projektu), może ułatwić ponowne użycie kodu na innych stronach.
Możesz również użyć obiektu takiego jak ten, który może okazać się czystszy:
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);
Zauważ, że w przypadku tablicy lub obiektu możesz użyć dowolnej metody ustawiania lub dostępu do funkcji i oczywiście możesz tam również przechowywać inne obiekty. Możesz dodatkowo zmniejszyć składnię obu metod w przypadku treści, które nie są tak dynamiczne, używając notacji literału JS, jak pokazano poniżej:
var dyn_functions = {
populate_Colours:function (arg1, arg2) {
// function body
};
, populate_Shapes:function (arg1, arg2) {
// function body
};
};
Edycja: oczywiście w przypadku większych bloków funkcjonalności możesz rozszerzyć powyższe do bardzo powszechnego „wzorca modułu”, który jest popularnym sposobem hermetyzacji funkcji kodu w zorganizowany sposób.