Ответ 1
Вот хорошая рецензия на то, что вам нужно; http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
Я заинтересован в использовании шаблона модуля, чтобы лучше организовать мои будущие проекты. К сожалению, есть только несколько кратких руководств и примеров доказательств концепции модуля.
Используя шаблон модуля, я хотел бы организовать проекты в такую структуру:
project.arm.object.method();
Где "проект" - мое глобальное имя проекта, "рука" - это подраздел или ветвь проекта, "объект" - это отдельный объект и т.д. методам и свойствам.
Однако я не уверен, как я должен декларировать и организовывать несколько "рук" и "объектов" в "проекте".
var project = window.project || {};
project.arm = project.arm || {};
project.arm.object = (function() {
var privateVar = "Private contents.";
function privateMethod() {
alert(privateVar);
}
return {
method: privateMethod
};
}());
Существуют ли какие-либо передовые методы или соглашения при определении сложной структуры модуля? Должен ли я просто объявить новую руку/объект под последним?
Вот хорошая рецензия на то, что вам нужно; http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
Dojo dojo.declare
отлично подходит для такого рода вещей, поскольку
Создайте конструктор, используя компактную нотацию для наследования и расширения прототипа.
Это также очень удобно, даже если вы просто удалите этот вид плиты котла:
var project = window.project || {};
project.arm = project.arm || {};
Если вы просто хотите эту функцию, вы можете использовать dojo.setObject
, но, конечно, писать что-то, чтобы сделать то же самое, тривиально.
dojo.setObject("project.arm.object" (function() {
var privateVar = "Private contents.";
function privateMethod() {
alert(privateVar);
}
return {
method: privateMethod
};
}()));
Недавно я использовал dojo.declare
/dojo.setObject
для большого проекта JavaScript (86 файлов, 7K + строк (не считая комментариев и пустых строк)), и было очень легко держать все организованное и управляемое, особенно если у вас есть механизм включения, например dojo.require
и dojo.provide
.
Есть много нюансов о том, как люди предпочитают это делать, но основное преимущество того, что вы называете шаблоном модуля (именованной области), заключается в том, что вы не загромождаете глобальное пространство имен, что помогает сохранять вещи чистым, если вы приносите другие библиотеки и т.д., и избегаете конфликтов имен.
Как вы упорядочиваете имена и вложенные области внутри, в основном это вопрос личных предпочтений.