Я думаю, что этот пример может помочь вам прояснить полезность Pattern Pattern .
Шаблон модуля
Шаблон модуля широко используется, потому что он обеспечивает структуру и помогает организовать
ваш код по мере роста. В отличие от других языков, JavaScript не имеет специального синтаксиса
для пакетов, но шаблон модуля предоставляет инструменты для создания автономной развязки
фрагменты кода, которые можно рассматривать как черные ящики функциональности и добавлять,
заменены или удалены в соответствии с (постоянно меняющимися) требованиями программного обеспечения
ты пишешь.
Шаблон модуля представляет собой комбинацию нескольких шаблонов, а именно:
- * 1014 Namespaces *
- Непосредственные функции
- Частные и привилегированные члены
- Объявление зависимостей
Первым шагом является настройка пространства имен. Давайте использовать функцию 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», Стоян Стефанов
(O'Reilly). Copyright 2010 Yahoo !, Inc., 9780596806750