Лично у меня другой стиль кодирования.Это одна из них.Другой - это, по сути, имитация стиля, используемого в backbone.js
var myProgram = (function() {
var someGlobal, someGlobal2;
var subModule1 = (function() {
...
var init = function() {
};
...
init();
return {
"someMethod": someMethod,
...
};
}());
var OtherSubModule = (function() {
...
var init = function(param) { ... };
...
return {
"init": init,
...
};
}());
var init = function(param) {
...
OtherSubModule.init({
"foo": param.foo,
"bar": param.bar,
...
});
};
return {
"init": init,
"somePublic": OtherSubModule.foobar,
...
}
}());
Зависит от того, нужно ли мне предоставлять публичный API другим пользователям, и эта магистраль работает намного лучше.Я предпочитаю делать модули, управляемые функцией init
, для начальной конфигурации, а для остальных - полностью управляемыми событиями.
[Edit]
Учитывая отредактированный вопрос, у меня есть другой шаблон для этого.Каждый файл определяет функцию для некоторого объекта, в моем случае это было $.FooBar.plugins
(function() {
var foo = function() { ... };
var bar = (function() { ... }());
myNamespace.plugins["MyPlugin"] = function() {
... do stuff
... bind to evevnts
};
}());
Затем мы используем загрузочный стриппер, который был примерно таким:
(function() {
var needed = function() {
// Feature detection
};
var load = function() { ... };
var getOptions = function() {
// Call something on a page by page basis.
};
for (var plugin in pluginList) {
if (needed(plugin)) {
load(plugin, function() {
// get page specific options
var options = getOptions();
// run plugin
myNameSpace.plugins[plugin](options);
// If all have been loaded trigger ready handlers
if (pluginCurrentCount == pluginCount) {
readyTrigger();
}
});
pluginCount++;
}
}
// start loading plugins after all have been counted
load.startLoading();
var readyTrigger = function() {
// Run all ready handlers
}
// Implement your own DOM ready function to run when all plugins
// have loaded.
myNameSpace.ready = function(handler) {
if (isReady) {
handler();
} else {
readyList.push(handler);
}
};
}());
Это многопробелы и псевдокод, но вы должны понять.Если это не obvouis чувствую, чтобы подвергнуть сомнению это.
Тогда на странице у нас есть кое-что как это
<html>
<head>
<script type="text/javascript">
var pageSpecific = {
"pluginName": {
"cssClass": "foobar",
"submitOnEnter": false,
...
},
...
};
</script>
<script src="bootstrapper.js" />
...
</head>
<body>
...
</body>
</html>