2010-11-04 116 views
5
  1. 我想知道 之间有什么区别 (优势/劣势)以下模式。
  2. 如何在模块模式上创建基于 的子模块?

我的目标是让我的JS组织成多个文件懒加载,但有一个命名空间。的JavaScript模块模式/组织/子模块

例如:

SO.global(global.js) SO.global.registration(registration.js)< - 负载

VS.

var SO = (function() { 

    var CONSTANT = 'Z'; 

    function createX(){ 
     alert("create X"); 
    } 

    function getY(){ 
     alert("get Y"); 
    } 

    return { 
     create:createX, 
     get:getY 
    } 

}()); 
+2

有两个例子之间没有什么区别....一个周围有小括号,但他们SH的Module/Asynchronous Definition规范应该做同样的事情。 – rob 2010-11-04 20:44:05

+0

第二个示例中的附加parens正被一些人用来指示立即调用函数表达式。 – 2010-11-04 21:05:00

+0

虽然我认为那个公约在那个公约的错误位置。我相信它通常写成(function(){...})() – Gopherkhan 2010-11-05 17:53:25

回答

5

你有没有考虑Require.JS?它试图提供以下解决方案:

  • 某种#包括/进口/需要
  • 加载嵌套的相关
  • 易用性开发,但随后通过优化工具的支持,帮助部署
  • 能力

Require.JS实现由Common.JS定义

3

这里有一个良好的阅读:http://snook.ca/archives/javascript/no-love-for-module-pattern,另有:http://lamb.cc/blog/category/javascript/

YUI使用它如饥似渴,因为这样做我,我还没有找到,我就被它限制任何情况下,它很好地与整合自定义模块的YUI依赖加载器。

(对不起,我知道这是不是一个完整的答案,但有一些给你的篡改信息)

+0

这些链接刚刚在我的“技能待办事项”管道上添加了几个月。 – cherouvim 2010-11-04 21:11:07

+0

第一个链接很奇怪。这就像他在反对使用私有变量。 – david 2010-11-04 21:20:39

+0

@cherouvim,同意,我约... 70%通过脑部怪物的方式(无论如何) – danjah 2010-11-05 00:35:27