18

我有兴趣使用模块模式来更好地组织我未来的项目。不幸的是,模块模式只有几个简短的教程和概念验证示例。

使用模块模式,我想将项目组织成这种结构:

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
    };

}());

在定义复杂的模块结构时是否有任何最佳实践或约定?我应该在最后一个下面声明一个新的手臂/对象吗?

4

3 回答 3

20

这是关于您所追求的内容的好文章;http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

于 2010-04-27T01:39:24.287 回答
3

Dojodojo.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.requiredojo.provide.

于 2010-04-27T02:28:54.630 回答
2

人们喜欢这样做的方式有很多细微差别,但是您所谓的模块模式(命名范围)的主要好处是您不会弄乱全局名称空间,如果您这样做有助于保持清洁引入其他库等,并避免名称冲突。

如何在其中组织名称和嵌套范围在很大程度上取决于个人喜好。

于 2010-04-27T01:41:41.520 回答