J'ai pensé développer la réponse ci-dessus en parlant de la manière dont les modules s'intègrent dans une application. J'avais lu cela dans le livre de Doug Crockford, mais étant novice en javascript, cela restait un peu mystérieux.
Je viens d'une formation en c# et j'ai donc ajouté une terminologie que je trouve utile dans ce domaine.
Html
Vous obtiendrez une sorte de fichier html de premier niveau. Il est utile de le considérer comme le fichier de votre projet. Chaque fichier javascript que vous ajoutez au projet doit aller dans ce fichier, malheureusement vous n'avez pas de support d'outil pour cela (j'utilise IDEA).
Vous devez ajouter des fichiers au projet avec des balises script comme ceci :
<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, il s'agit en fait de quelque chose avec des règles plus folles !
Fichier de l'espace de noms
MasterFile.js
myAppNamespace = {};
c'est tout. Il s'agit simplement d'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).
Module(s)
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 assigner une fonction de compteur de messages à une variable de notre application. Il s'agit d'une fonction qui renvoie une fonction que nous exécuter immédiatement .
Concepts
Je pense qu'il est utile de considérer la ligne supérieure de SomeComponent comme l'espace de noms dans lequel vous déclarez quelque chose. La seule réserve 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 fait que des pas mineurs avec cela pour le moment (je refais du javascript normal hors d'une application extjs pour pouvoir la tester) mais cela semble assez sympa car on peut définir de petites unités fonctionnelles tout en évitant le bourbier de 'ceci' .
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.
0 votes
Tout cela a changé au cours des quatre dernières années, mais grâce à une surmodération zélée, ces informations périmées resteront en place. pour toujours . Voici Page de MDN sur les modules ES6.