Ответ 1
Я думаю, что этот пример может помочь вам прояснить полезность шаблона модуля.
Шаблон модуля
Шаблон модуля широко используется, поскольку он обеспечивает структуру и помогает организовать ваш код по мере его роста. В отличие от других языков, JavaScript не имеет специального синтаксиса для пакетов, но шаблон модуля предоставляет инструменты для создания автономных развязанных фрагменты кода, которые можно рассматривать как черные ящики функциональности и добавлены, заменяется или удаляется в соответствии с (постоянно меняющимися) требованиями программного обеспечения вы пишете.
Шаблон модуля представляет собой комбинацию нескольких шаблонов, а именно:
- Пространство имен
- Непосредственные функции
- Частные и привилегированные участники
- Объявление зависимостей
Первым шагом является создание пространства имен. Позволяет использовать функцию namespace() из более ранних в этой главе и запустите пример служебного модуля, который предоставляет полезные методы массива:
MYAPP.namespace('MYAPP.utilities.array');
Следующий шаг - определение модуля. В шаблоне используется немедленная функция, которая предоставлять конфиденциальную информацию, если требуется конфиденциальность. Непосредственная функция возвращает объект - фактический модуль с его открытым интерфейсом, который будет доступен для потребителей модуль:
MYAPP.utilities.array = (function () {
return {
// todo...
};
}());
Затем добавим некоторые методы в открытый интерфейс:
MYAPP.utilities.array = (function () {
return {
inArray: function (needle, haystack) {
// ...
},
isArray: function (a) {
// ...
}
};
}());
Используя закрытую область, предоставляемую непосредственной функцией, вы можете объявить некоторые частные свойства и методы по мере необходимости. Прямо в верхней части непосредственной функции также будет местом для объявления любых зависимостей, которые может иметь ваш модуль. Следующий объявления переменных, вы можете по желанию разместить любой разовый код инициализации, который помогает настроить модуль. Конечным результатом является объект, возвращаемый непосредственной функцией который содержит общедоступный API вашего модуля:
MYAPP.namespace('MYAPP.utilities.array');
MYAPP.utilities.array = (function () {
// dependencies
var uobj = MYAPP.utilities.object,
ulang = MYAPP.utilities.lang,
// private properties
array_string = "[object Array]",
ops = Object.prototype.toString;
// private methods
// ...
// end var
// optionally one-time init procedures
// ...
// public API
return {
inArray: function (needle, haystack) {
for (var i = 0, max = haystack.length; i < max; i += 1) {
if (haystack[i] === needle) {
return true;
}
}
},
isArray: function (a) {
return ops.call(a) === array_string;
}
// ... more methods and properties
};
}());
Шаблон модуля - широко используемый и рекомендуемый способ организовать ваш кода, особенно по мере его роста.
"Шаблоны JavaScript, Стоян Стефанов (OReilly). Copyright 2010 Yahoo!, Inc., 9780596806750