我有一个具有常用功能的小库。它的结构如下:
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();
在这种情况下可以抓住这个吗?有可能吗?
答案 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;
要允许组引用稍后声明的其他组,您可以对组中的方法使用局部变量,也可以在开头声明所有组。
请记住,如果您在没有初始化的情况下尽早开始声明并稍后引用它们,则需要确保在所有依赖的组都已初始化之前不调用方法。这可能导致相当数量的簿记,这就像需要的模块系统派上用场一样。