Я думал, что я расскажу о том, как вы поместили модули вместе в приложение. Я читал об этом в книге doug crockford, но, будучи новичком в javascript, все это было немного загадочно.
Я родом из C# фона, поэтому добавил терминологию, которую я нахожу полезной.
Html
Вы будете иметь некоторый kindof HTML-файл верхнего уровня. Это помогает думать об этом как о файле проекта.Каждый файл javascript, который вы добавляете в проект, хочет пойти на это, к сожалению, вы не получаете поддержку инструмента для этого (я использую IDEA).
Вам нужно добавить файлы в проект с подлинника тегами, как это:
<script type="text/javascript" src="app/native/MasterFile.js" /></script>
<script type="text/javascript" src="app/native/SomeComponent.js" /></script>
Оказывается рушится теги вызывает вещи на провал - в то время как это выглядит, как XML, это действительно что-то с сумасшедшими правилами!
пространство имен файлов
MasterFile.js
myAppNamespace = {};
это все. Это просто для добавления единственной глобальной переменной для остальной части нашего кода, в которой вы можете жить. Вы также можете объявить вложенные пространства имен здесь (или в своих собственных файлах).
Модуль (ы)
SomeComponent.js
myAppNamespace.messageCounter= (function(){
var privateState = 0;
var incrementCount = function() {
privateState += 1;
};
return function (message) {
incrementCount();
//TODO something with the message!
}
})();
Что мы делаем здесь, назначая функцию счетчика сообщений переменной в нашем приложении. Это функция, которая возвращает функцию, которую мы немедленно вызываем ..
Концепции
Я думаю, что это помогает думать о верхней строке в SomeComponent как пространство имен, где вы объявляете что-то. Единственное предостережение в этом - все ваши пространства имен должны сначала появиться в каком-то другом файле - это всего лишь объекты, внедренные нашей переменной приложения.
Я только сделал незначительные шаги с этим на данный момент (я рефакторинг некоторого нормального javascript из приложения extjs, чтобы я мог его протестировать), но это кажется довольно приятным, так как вы можете определить небольшие функциональные блоки, избегая болото 'это'.
Вы также можете использовать этот стиль для определения конструкторов, возвращая функцию, которая возвращает объект с набором функций и не вызывает его немедленно.
Это все изменилось в течение последних четырех лет, но благодаря ревностным чрезмерной сдержанности, это устарелый информация будет висеть вокруг * навсегда *. Вот [страница MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export) в модулях ES6. – bbsimonbb