Ich dachte, ich würde die obige Antwort erweitern, indem ich darüber spreche, wie Sie Module in eine Anwendung einfügen würden. Ich hatte darüber im Doug Crockford-Buch gelesen, aber als Neuling in Javascript war alles noch ein bisschen mysteriös.
Ich komme aus ac # Hintergrund, habe also eine Terminologie hinzugefügt, die ich von dort aus nützlich finde.
Html
Sie haben eine Art HTML-Datei der obersten Ebene. Es ist hilfreich, sich dies als Ihre Projektdatei vorzustellen. Jede Javascript-Datei, die Sie dem Projekt hinzufügen, möchte darauf eingehen. Leider erhalten Sie dafür keine Tool-Unterstützung (ich verwende IDEA).
Sie müssen dem Projekt Dateien mit folgenden Skript-Tags hinzufügen:
<script type="text/javascript" src="app/native/MasterFile.js" /></script>
<script type="text/javascript" src="app/native/SomeComponent.js" /></script>
Es scheint, dass das Reduzieren der Tags dazu führt, dass Dinge fehlschlagen - obwohl es so aussieht, als ob XML wirklich etwas mit verrückteren Regeln ist!
Namespace-Datei
MasterFile.js
myAppNamespace = {};
das ist es. Dies dient nur zum Hinzufügen einer einzelnen globalen Variablen, in der der Rest unseres Codes leben soll. Sie können hier (oder in eigenen Dateien) auch verschachtelte Namespaces deklarieren.
Modul (e)
SomeComponent.js
myAppNamespace.messageCounter= (function(){
var privateState = 0;
var incrementCount = function () {
privateState += 1;
};
return function (message) {
incrementCount();
//TODO something with the message!
}
})();
Wir weisen hier einer Variablen in unserer Anwendung eine Nachrichtenzählerfunktion zu. Es ist eine Funktion, die eine Funktion zurückgibt, die wir sofort ausführen .
Konzepte
Ich denke, es ist hilfreich, sich die oberste Zeile in SomeComponent als den Namespace vorzustellen, in dem Sie etwas deklarieren. Die einzige Einschränkung besteht darin, dass alle Ihre Namespaces zuerst in einer anderen Datei angezeigt werden müssen - es handelt sich lediglich um Objekte, die von unserer Anwendungsvariablen verwurzelt werden.
Ich habe nur kleine Schritte mit diesem zur Zeit genommen (ich bin Refactoring einige normale Javascript aus einer extjs App , damit ich es testen kann) , aber es scheint ganz nett , wie Sie kleine Funktionseinheiten unter Vermeidung der Morast definieren : ‚Diese ' .
Sie können diesen Stil auch verwenden, um Konstruktoren zu definieren, indem Sie eine Funktion zurückgeben, die ein Objekt mit einer Sammlung von Funktionen zurückgibt und es nicht sofort aufruft.