W JS istnieje kilka "standardowych" systemów modułów:
- CommonJS Module Pattern - jego lekko uproszczona wersja to standardowy system modułów w node.js/io.js; służą do synchronicznego wczytywania zależności (stąd nie są dobre dla browserów)
- Asynchronous Module Definition - są odpowiedzią na zapotrzebowanie na asynchroniczne wczytywanie zależności w przeglądarkach
- Universal Module Definition - serwuje AMD browserom i CJSMP serwerom (dobre dla aplikacji izomorficznych)
- Chainable Module Definition - czyli moduły ze składnią a'la jQuery
- ES6 Modules - czyli moduły natywne w ECMAScript 6; obecnie jednak nie ma żadnej implementacji
Po więcej odsyłam do http://addyosmani.com/writing-modular-js/ i http://tutorials.comandeer.pl/js-dynamic.html (w moim są linki odsyłające dalej). Moduły na dzień dzisiejszy są jedynym sensownym sposobem hermetyzacji kodu JS.
Co prawda ES6 wprowadza składnię klas, lecz de facto pozwala tworzyć jedynie metody publiczne. Metody prywatne da się osiągnąć przy pomocy normalnych zmiennych, a chronione można jakoś wykombinować używając symboli (czyli znów nowości z ES6).