【问题标题】:JavaScript module pattern / organization / sub-modulesJavaScript 模块模式/组织/子模块
【发布时间】:2011-05-05 07:16:03
【问题描述】:
  1. 我想知道是什么 区别 (优点/缺点)之间 以下模式。
  2. 如何创建基于子模块 关于模块模式?

我的目标是将我的 js 组织成 多个文件,这些文件延迟加载,但只有一个命名空间。

例如:

SO.global (global.js) SO.global.registration (registration.js)

var SO = function(){

    var CONSTANT = 'Z';

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

    function getY(){
       alert("get Y");
    }
    return{
      create:createX,
      get:getY
    }
}();

//SO.createX(); 
//SO.getY();

VS.

var SO = (function() {

    var CONSTANT = 'Z';

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

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

    return {
      create:createX,
      get:getY
    }

} ());

【问题讨论】:

  • 这两个例子没有区别......一个有括号,但他们应该做同样的事情。
  • 有些人使用第二个示例中的附加括号来指示函数表达式被立即调用。
  • 我认为括号在该约定的错误位置。我相信它通常写成 (function(){...})()

标签: javascript namespaces module-pattern


【解决方案1】:

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

  • 某种#include/import/require
  • 能够加载嵌套依赖项
  • 易于开发人员使用,但由有助于部署的优化工具提供支持

Require.JS 实现了 Common.JS 定义的Module/Asynchronous Definition 规范

【讨论】:

    【解决方案2】:

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

    YUI 像我一样狂热地使用它,我还没有发现任何受它限制的情况,它很好地与自定义模块的 YUI 依赖加载器集成。

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

    【讨论】:

    • 这些链接刚刚在我的“skills-todo”管道中添加了几个月。
    • 第一个链接很奇怪。就像他在反对使用私有变量一样。
    • @cherouvim,同意,我大约... 70% 通过所涉及的大脑怪胎(无论如何对我来说)
    • @david,我收集到了同样的感觉,这增加了另外 25% 的调查工作,包括他文章中的 cmets 也很有趣
    • 关于 Snook 文章,我要说的一件事是,对模块模式的反对意见——反对意见说它需要您编辑代码以找出隐藏的数据——是不太正确的。我在 Firebug 中使用了一个非常简单的解决方法。我们只需要在可以访问私有数据的函数内设置一个条件断点,然后将断点上的条件设置为!console.log(hiddenVar)。断点永远不会中断(除非您希望它中断,在这种情况下,您可以删除 !),但导致函数执行现在将记录我的私人数据以便于检查。
    猜你喜欢
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多