Hub*_*bro 13 javascript project-management module-pattern
我已经阅读了有关揭示模块模式的信息,我喜欢它.但是那些"主对象"拥有数十个子对象和数百个函数的大型项目呢?我不想成为将所有代码放在一个匿名函数闭包中的人.
那么大型模块模式项目如何管理?
Cri*_*hez 12
您可以使用扩充将模块分离到不同的文件中.准备好生产版本后,可以将这些文件连接成一个或多个文件.
File1定义了模块Mn
var M = M || {};
M.n = M.n || {};
(function (self) {
self.doSomething = function () {
console.log("something");
};
})(M.n);
Run Code Online (Sandbox Code Playgroud)
File2定义了模块Mnp
var M = M || {};
M.n = M.n || {};
M.n.p = M.n.p || {};
(function (self) {
self.doSomethingElse = function () {
console.log("something else");
};
})(M.n.p);
Run Code Online (Sandbox Code Playgroud)
现在,在"主"脚本中,您可以自由使用这些模块的成员.
M.n.doSomething();
M.n.p.doSomethingElse();
Run Code Online (Sandbox Code Playgroud)
定义模块可能有点乏味,但你应该能够鞭打一些东西来自动化它.在过去,我使用这个小脚本来帮助简化它,但随意制作自己的脚本.您甚至可以使用一致的文件命名来烘焙依赖关系管理.
var namespace = function(path, context, args) {
var finalLink = namespace._generateChain(path, window);
context.apply(finalLink, [finalLink].concat(args));
};
namespace._generateChain = function(path, root) {
var segments = path.split('.'),
cursor = root,
segment;
for (var i = 0; i < segments.length; ++i) {
segment = segments[i];
cursor = cursor[segment] = cursor[segment] || {};
}
return cursor;
};
Run Code Online (Sandbox Code Playgroud)
使用:
namespace("M.n.p", function (self) {
self.doSomethingElse = function () {
console.log("something else");
};
});
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因你想在不同的别名下包含一个变量,你可以将它传递给命名空间函数,它将作为参数传递给函数.
namespace("M.n.p", function (self, $) {
self.doSomethingElse = function () {
$("p").text("something else");
};
}, jQuery);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2334 次 |
| 最近记录: |