Modulmuster - Wie kann der Code für ein Modul in verschiedene JS-Dateien aufgeteilt werden?

Für das Modulmuster mache ich etwas wie:

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

Wie teile ich den Code auf? Ich kann mir ein paar Möglichkeiten vorstellen, z. B. eine Hierarchie von Namespaces zu verwenden oder das Objekt von außen um zu erweiternwindow.myGlobalNamespace.additionalFunc = function () {//blabla}. Was sind die anderen Möglichkeiten? Was sind die Vor- und Nachteile? Welches gilt als bessere Praxis?

Beide der beiden Antworten deuten auf RequireJS hin. Können Sie bitte erklären, wie RequireJS diese Probleme lösen kann:

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

Und die Leute können es tun

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

um das Verhalten meines Codes zu ändern!

Hier gibt es zwei Probleme:

Wir können kein Feld haben, das für Kinder zugänglich ist, aber nicht für die Öffentlichkeit (d. H. Geschützt). Gibt es eine Möglichkeit, das zu erreichen?

Wenn nicht, das heißt, wenn wir möchten, dass parentPrivate zugänglich ist, müssen wir es öffentlich machen. Dann kann der Benutzer es ändern!

Darüber hinaus können alle öffentlichen Funktionen geändert und ersetzt werden. Ich möchte nicht, dass das passiert.

Ich verstehe nicht, wie RequireJS diese Probleme löst. Kann jemand Licht ins Dunkel bringen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage