Wzorzec modułu - jak podzielić kod dla jednego modułu na różne pliki js?

Dla wzorca modułu robię coś takiego:

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

Jak podzielić kod? Mogę wymyślić kilka sposobów, na przykład użyć hierarchii przestrzeni nazw lub rozwinąć obiekt na zewnątrzwindow.myGlobalNamespace.additionalFunc = function () {//blabla}. Jakie są inne sposoby? Jakie są zalety i wady? Która jest uważana za lepszą praktykę?

Obie odpowiedzi wskazują na wymagania. Czy możesz wyjaśnić, w jaki sposób RequireJS może rozwiązać te problemy:

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

A ludzie mogą to zrobić

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

zmienić zachowanie mojego kodu!

W tym przypadku występują dwa problemy:

Nie możemy mieć pola dostępnego dla dziecka, ale nie dla publiczności zewnętrznej (tj. Chronionej). Czy jest jakiś sposób, aby to osiągnąć?

Jeśli nie, oznacza to, że jeśli chcemy mieć dostęp do Prywatnej Prywatności, musimy ją upublicznić. Następnie użytkownik będzie mógł go zmodyfikować!

Co więcej, wszystkie funkcje publiczne mogą być zmieniane i zastępowane. Nie chcę, żeby tak się stało.

Nie widzę, jak RequireJS rozwiązuje te problemy. Czy ktoś może rzucić trochę światła?

questionAnswers(4)

yourAnswerToTheQuestion