<分区>
我读过 Revealing Module Pattern我喜欢它。但是对于“主对象”具有数十个子对象和可能数百个函数的大型项目呢?我不想成为将所有代码放在一个匿名函数闭包中的人。
那么大型模块模式项目是如何管理的呢?
<分区>
我读过 Revealing Module Pattern我喜欢它。但是对于“主对象”具有数十个子对象和可能数百个函数的大型项目呢?我不想成为将所有代码放在一个匿名函数闭包中的人。
那么大型模块模式项目是如何管理的呢?
最佳答案
您可以使用扩充将模块分离到不同的文件中。准备好发布产品后,您可以将这些文件连接成一个或多个文件。
File1 定义模块 M.n
var M = M || {};
M.n = M.n || {};
(function (self) {
self.doSomething = function () {
console.log("something");
};
})(M.n);
File2 定义模块 M.n.p
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);
现在在您的“主”脚本中您可以自由使用这些模块的成员。
M.n.doSomething();
M.n.p.doSomethingElse();
定义模块可能有点单调乏味,但您应该能够快速创建一些东西使其自动化。过去,我使用这个小脚本来帮助简化操作,但您可以随意制作自己的脚本。您甚至可以通过一致的文件命名来融入依赖管理。
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;
};
使用:
namespace("M.n.p", function (self) {
self.doSomethingElse = function () {
console.log("something else");
};
});
如果出于某种原因你想在不同的别名下包含一个变量,你可以将它传递给命名空间函数,它将作为参数传递给函数。
namespace("M.n.p", function (self, $) {
self.doSomethingElse = function () {
$("p").text("something else");
};
}, jQuery);
关于javascript - 我如何专业地构建我的模块模式 Javascript 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085581/
相关文章:
javascript - 如何在 Material Design Lite 工具提示中使用类而不是 ID?
javascript - 为什么 jQuery.parseJSON 在 Firefox 中无法解析这个有效的 JSON 文档?
javascript - 如何禁用文本字段中的非罗马化字符和符号?
project-management - 当您有多个项目时,Scrum 如何工作?
javascript - 使用 JSON 将 Javascript 对象发送到 Python Flask 时出错
project-management - 如何为设计 session 制定固定报价?
project-management - 如何创建准确的小时估算?