我对使用模块模式更好地组织我未来的项目感兴趣。不幸的是,只有一些简短的教程和模块模式的概念验证示例。
使用模块模式,我想将项目组织成这种结构:
project.arm.object.method();
“project”是我的全局项目名称,“arm”是项目的子部分或分支,“object”是单个对象,依此类推方法和属性。
但是,我不确定如何在“项目”下宣布和组织多个“武器”和“对象”。
var project = window.project || {};
project.arm = project.arm || {};
project.arm.object = (function() {
var privateVar = "Private contents.";
function privateMethod() {
alert(privateVar);
}
return {
method: privateMethod
};
}());
在定义复杂的模块结构时是否有任何最佳实践或约定?我应该在最后一个下面声明一个新的手臂/物体吗?
答案 0 :(得分:20)
这是对你所追求的事情的一个很好的描述; http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
答案 1 :(得分:3)
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
等包含机制时。
答案 2 :(得分:2)
人们更喜欢这样做有很多细微差别,但是你所谓的模块模式(一个命名范围)的主要好处是你不会弄乱全局命名空间,这有助于保持事物如果你引入其他库等清理,并避免名称冲突。
如何组织名称和嵌套范围主要取决于个人偏好。