2014-09-24 116 views
0

我有一個具有常用功能的小型庫。它的結構是這樣的:這在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

您是否考慮過使用完整的模塊/加載程序系統,如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>

要允許組引用後來被宣佈其他組,您可以使用局部變量的方法的組內,或宣佈所有組在開始時。請記住,如果您在未初始化的情況下開始聲明事物並在稍後引用它們,則需要確保在所有它所依賴的組都已初始化之前,不要調用該方法。這可以導致相當數量的記錄,這就是像Require這樣的模塊系統派上用場的地方。