J'ai pensé développer la réponse ci-dessus en expliquant comment vous intégriez des modules dans une application. J'avais lu à ce sujet dans le livre de Doug Crockford, mais étant nouveau en javascript, tout était encore un peu mystérieux.
Je viens de fond ac # donc j'ai ajouté une terminologie que je trouve utile à partir de là.
HTML
Vous aurez une sorte de fichier html de premier niveau. Il est utile de considérer cela comme votre fichier de projet. Chaque fichier javascript que vous ajoutez au projet veut y entrer, malheureusement vous n'obtenez pas de support pour cela (j'utilise IDEA).
Vous devez ajouter des fichiers au projet avec des balises de script comme celle-ci:
<script type="text/javascript" src="app/native/MasterFile.js" /></script>
<script type="text/javascript" src="app/native/SomeComponent.js" /></script>
Il semble que le fait de réduire les balises fasse échouer les choses - alors que cela ressemble à xml, c'est vraiment quelque chose avec des règles plus folles!
Fichier d'espace de noms
MasterFile.js
myAppNamespace = {};
c'est tout. C'est juste pour ajouter une seule variable globale pour le reste de notre code. Vous pouvez également déclarer des espaces de noms imbriqués ici (ou dans leurs propres fichiers).
Modules)
SomeComponent.js
myAppNamespace.messageCounter= (function(){
var privateState = 0;
var incrementCount = function () {
privateState += 1;
};
return function (message) {
incrementCount();
//TODO something with the message!
}
})();
Ce que nous faisons ici, c'est attribuer une fonction de compteur de messages à une variable dans notre application. C'est une fonction qui renvoie une fonction que nous exécutons immédiatement .
Concepts
Je pense qu'il est utile de penser à la ligne supérieure de SomeComponent comme étant l'espace de noms où vous déclarez quelque chose. La seule mise en garde à cela est que tous vos espaces de noms doivent d'abord apparaître dans un autre fichier - ce ne sont que des objets enracinés par notre variable d'application.
Je n'ai pris que des mesures mineures avec cela pour le moment (je suis en train de refactoriser du javascript normal à partir d'une application extjs afin de pouvoir le tester) mais cela semble assez agréable car vous pouvez définir de petites unités fonctionnelles tout en évitant le bourbier de `` this » .
Vous pouvez également utiliser ce style pour définir des constructeurs en renvoyant une fonction qui renvoie un objet avec une collection de fonctions et en ne l'appelant pas immédiatement.