这在Javascript中的模块模式中

时间:2014-09-24 14:06:34

标签: javascript

我有一个具有常用功能的小库。它的结构如下:

var $MY_APP = (function() {

    return {
        GROUP1: {
            method1 : function(){ console.log("Test"); },
            method2 : function(){}
        },
        GROUP2: {
            method1 : function(){ },
            method2 : function(){}
        },
        GROUPX: {
            method1 : function(){ $MY_APP.GROUP1.method1(); },
            method2 : function(){}
        },
    }

})();

是否可以从GROUPX的任何方法调用另一个组方法而不像示例那样执行它?

$MY_APP.utils.GROUP1.method1();

在这种情况下可以抓住这个吗?有可能吗?

1 个答案:

答案 0 :(得分:1)

您是否考虑使用完整的模块/加载程序系统,例如Require.JS?它可能会有所帮助,特别是如果您获得更多组,或将它们分成多个文件。

要获得您现在使用的版本,只需使用中间变量即可。而不是在return语句中一次声明所有模块,而是先声明它们并将它们分配给应用程序中的变量。这允许他们更简单地引用彼此,然后您可以在组中将它们全部返回。

例如:



var message = $("#message");

var $MY_APP = (function() {
  var GROUP1 = {
    method1: function() {
      message.text("Test");
    },
    method2: function() {}
  };
  var GROUP2 = {
    method1: function() {},
    method2: function() {}
  };
  var GROUPX = {
    method1: function() {
      GROUP1.method1();
    },
    method2: function() {}
  };

  return {
    GROUP1: GROUP1,
    GROUP2: GROUP2,
    GROUPX: GROUPX
  }

})();

$MY_APP.GROUP1.method1();

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="message"></div>
&#13;
&#13;
&#13;

要允许组引用稍后声明的其他组,您可以对组中的方法使用局部变量,也可以在开头声明所有组。

请记住,如果您在没有初始化的情况下尽早开始声明并稍后引用它们,则需要确保在所有依赖的组都已初始化之前不调用方法。这可能导致相当数量的簿记,这就像需要的模块系统派上用场一样。