Tryptyk Jak zaznacza, można wywołać dowolną funkcję globalnego scope przez znalezienie go w zawartości obiektu hosta.
Czystsze metoda, która zanieczyszcza globalnej przestrzeni nazw znacznie mniej, jest jawnie umieścić funkcje do tablicy bezpośrednio tak:
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);
Tablica ta może być również własnością jakiegoś przedmiotu innego niż globalna Obiekt hosta zbyt oznacza, że można skutecznie utworzyć własną przestrzeń nazw, jak wiele bibliotek JS, takich jak jQuery zrobić. Przydaje się to w celu zmniejszenia konfliktów, jeśli uwzględnisz wiele oddzielnych bibliotek narzędziowych na tej samej stronie i (inne części twojego projektu pozwalają) może ułatwić ponowne użycie kodu na innych stronach.
Można również użyć obiektu jak tak, to jakie można znaleźć czystsze:
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);
Należy zauważyć, że zarówno z tablicy lub obiektu, można użyć metody ustalania lub dostępu do funkcji, a może oczywiście przechowuj tam również inne przedmioty. Możesz dodatkowo zredukować składnię obu metoda contant że nie jest to synamic za pomocą JS dosłownego zapisu tak:
var dyn_functions = {
populate_Colours:function (arg1, arg2) {
// function body
};
, populate_Shapes:function (arg1, arg2) {
// function body
};
};
edit: oczywiście dla większych bloków funkcjonalność można rozszerzyć wyżej bardzo powszechne "wzorzec modułu", który jest popularnym sposobem enkapsulacji elementów kodu w zorganizowany sposób.
I zalecam odradzanie tego na rzecz posiadania oddziałów lokalnych w jednej metodzie "zaludnienia". Sprawiłoby, że byłaby bardziej testowalna i wyglądała mniej "hacky". –
zobacz moją odpowiedź tutaj. [zadzwoń po imieniu w javascript] (https://stackoverflow.com/a/46090820/7771019) –