Nie mogę znaleźć żadnych dostępnych przykładów pokazujących, jak dwa (lub więcej) różne moduły są połączone, aby ze sobą współpracować.
Chciałbym więc zapytać, czy ktoś ma czas na napisanie przykładu wyjaśniającego, jak moduły współpracują ze sobą.
javascript
module
Srle
źródło
źródło
Odpowiedzi:
Aby podejść do wzorca projektowania modułowego, musisz najpierw zrozumieć następujące pojęcia:
Wyrażenie funkcji wywoływane natychmiastowo (IIFE):
Istnieją dwa sposoby korzystania z tych funkcji. 1. Deklaracja funkcji 2. Wyrażenie funkcyjne.
Tutaj używamy wyrażenia funkcyjnego.
Co to jest przestrzeń nazw? Teraz, jeśli dodamy przestrzeń nazw do powyższego fragmentu kodu
Co to jest domknięcie w JS?
Oznacza to, że jeśli zadeklarujemy jakąkolwiek funkcję z dowolnym zakresem zmiennej / wewnątrz innej funkcji (w JS możemy zadeklarować funkcję wewnątrz innej funkcji!), To zawsze będzie liczyć ten zakres funkcji. Oznacza to, że każda zmienna w funkcji zewnętrznej będzie zawsze czytana. Nie odczyta zmiennej globalnej (jeśli istnieje) o tej samej nazwie. Jest to również jeden z celów stosowania wzorca projektowania modułowego, unikającego konfliktu nazw.
Teraz zastosujemy te trzy koncepcje, o których wspomniałem powyżej, aby zdefiniować nasz pierwszy wzorzec projektowania modułowego:
jsfiddle dla powyższego kodu.
Celem jest ukrycie zmiennej dostępności przed światem zewnętrznym.
Mam nadzieję że to pomoże. Powodzenia.
źródło
(function() { /* Your code goes here */}());
to w rzeczywistości IIFE (natychmiastowe wywołanie wyrażenia funkcyjnego), ok, jest anonimowy, ponieważ nie ma nazwy, więc możesz nawet nazwać go IIAFE (natychmiastowo wywołując anonimowe wyrażenie funkcyjne). Zobacz więcej na temat IIFE na stackoverflow.com/questions/ 2421911 /…Naprawdę poleciłbym każdemu, kto podejmuje ten temat, przeczytanie bezpłatnej książki Addy Osmani:
„Nauka wzorców projektowych JavaScript”.
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
Ta książka bardzo mi pomogła, kiedy zaczynałem pisać łatwiejszy w utrzymaniu JavaScript i nadal używam go jako odniesienia. Spójrz na jego różne implementacje wzorców modułów, wyjaśnia je naprawdę dobrze.
źródło
Pomyślałem, że rozszerzę powyższą odpowiedź, mówiąc o tym, jak dopasować moduły razem do aplikacji. Czytałem o tym w książce Douga Crockforda, ale javascript był dla mnie nowicjuszem, ale wciąż było trochę tajemnicze.
Pochodzę z ac # background, więc dodałem terminologię, która jest dla mnie przydatna.
HTML
Będziesz miał jakiś plik HTML najwyższego poziomu. Pomyśl o tym jako o pliku projektu. Każdy plik javascript, który dodajesz do projektu, chce się w to znaleźć, niestety nie masz do tego wsparcia narzędziowego (używam IDEA).
Musisz dodać pliki do projektu z tagami skryptów takimi jak:
Wygląda na to, że zwinięcie tagów powoduje niepowodzenie - chociaż wygląda na XML, to naprawdę coś z bardziej szalonymi zasadami!
Plik przestrzeni nazw
MasterFile.js
Otóż to. Służy to tylko do dodania pojedynczej zmiennej globalnej, w której pozostanie reszta naszego kodu. Możesz także zadeklarować zagnieżdżone przestrzenie nazw tutaj (lub w ich własnych plikach).
Moduł (y)
SomeComponent.js
To, co tutaj robimy, to przypisywanie funkcji licznika komunikatów do zmiennej w naszej aplikacji. Jest to funkcja, która zwraca funkcję, którą natychmiast wykonujemy .
Koncepcje
Myślę, że warto pomyśleć o górnej linii w SomeComponent jako o przestrzeni nazw, w której coś deklarujesz. Jedynym zastrzeżeniem jest to, że wszystkie przestrzenie nazw muszą najpierw pojawić się w jakimś innym pliku - są to po prostu obiekty zakorzenione w naszej zmiennej aplikacji.
W tej chwili wykonałem tylko drobne kroki (refaktoryzuję normalny skrypt javascript z aplikacji extjs, aby móc go przetestować), ale wydaje się to całkiem miłe, ponieważ możesz zdefiniować małe jednostki funkcjonalne, unikając grzęzawiska tego ” .
Możesz również użyć tego stylu do definiowania konstruktorów, zwracając funkcję, która zwraca obiekt z kolekcją funkcji i nie wywołując jej od razu.
źródło
Tutaj https://toddmotto.com/mastering-the-module-pattern znajdziesz dokładnie wyjaśniony wzór. Dodam, że drugą rzeczą dotyczącą modułowego JavaScript jest struktura kodu w wielu plikach. Wiele osób może ci doradzić, abyś skorzystał z AMD, ale z doświadczenia mogę powiedzieć, że w pewnym momencie skończy się wolna odpowiedź strony z powodu wielu żądań HTTP. Wyjściem jest wstępna kompilacja modułów JavaScript (po jednym na plik) do jednego pliku zgodnie ze standardem CommonJS. Spójrz na próbki tutaj http://dsheiko.github.io/cjsc/
źródło
Wzorzec modułu JavaScript można znaleźć tutaj http://www.sga.su/module-pattern-javascript/
źródło