Modèle de module - Comment diviser le code d'un module en différents fichiers js?

Pour le motif de module, je suis en train de faire quelque chose comme:

(function(namespace) {
    //tons of code
    //blabla
})(window.myGlobalNamespace);

Comment puis-je séparer le code? Je ne peux penser à quelques égards, comme l'utilisation d'une hiérarchie des espaces de noms, ou d'étendre l'objet à l'extérieur par window.myGlobalNamespace.additionalFunc = function () {//blabla}. Quelles sont les autres façons de faire? Quels sont les avantages et les inconvénients? Qui est considéré comme une meilleure pratique?

Les deux les deux réponses suggèrent RequireJS. Pouvez-vous nous expliquer comment RequireJS peuvent résoudre ces problèmes:

first.js:

(function(context) {
    var parentPrivate = 'parentPrivate';
})(window.myGlobalNamespace);

second.js:

(function(context) {
    this.childFunction = console.log('trying to access parent private field: ' + parentPriavte);
}(window.myGlobalNamespace.subNamspace);

main.js:

window.myGlobalNamespace.subNamspace.childFunction(); //doesn't work

Et les gens peuvent faire

window.myGlobalNamespace.subNamspace.childFunction = function() {alert("a new function");}

modifier mon code de comportement!

Ici, il y a deux problèmes:

  1. Nous ne pouvons pas avoir un champ qui est accessible par enfant, mais pas à l'extérieur public (c'est à dire protégé). Est-il un moyen d'y parvenir?

  2. Si pas, de sens que si nous wanteparentPrivate pour être accessible, nous avons besoin de le rendre public. Ensuite, l'utilisateur sera en mesure de le modifier!

De plus, toutes les fonctions publiques peuvent être modifiés et remplacés. Je ne veux pas que cela se produise.

Je ne vois pas comment RequireJS résout ces problèmes. Quelqu'un peut jeter un peu de lumière?

source d'informationauteur Boyang | 2013-12-01