2011-04-04 71 views
0

我正在試驗當前項目的揭示模塊模式。從JavaScript中揭示模塊模式的另一種方法返回多個調用方法

我有初始化方法在幾個方法的頂部,我設置變量和調用方法,以使模塊在被適當的事件處理程序調用時正常工作。

我有一個的init方法看起來像這樣目前:

function init(elem) { 
    var width, 
    height, 
    tipHeight, 
    tipWidth, 
    topMargin, 
    leftMargin; 

    return appendTip(); 
}; 

所以這個返回appendTip方法的調用。

在另一個模塊的設置如下所示:

function init() { 
     var width = 0, 
     $siteNavListElem = $('.nav-SiteNav .nav-list > li'), 
     $subNav = $('.subNav > li > ul'); 

      appendSubNav(); 
     getWidth(); 
}; 

所以,現在有兩個調用單獨的方法。此代碼工作正常,但想知道它是否可以是任何整潔?

如何返回這兩個?將他們歸還給他們是最好的方式嗎?

謝謝。

回答

1

其實我不確定你是否跟隨揭示模塊模式。該模式解釋了返回包含對象的公共接口的公共對象。所以從一個函數中返回一個函數並不真正構成這個模式。對於這種模式,你正在尋找做這樣的事情

function revealingPattern = function(){ 
    var privateVar = 1; 
    function prviateFunction(){ 
    //..... 
    } 

    function publicFunction(){ 
    //code 
    } 

    function pubFunction2()[ 
    //code 
    } 
    var publicVariable = 2; 

    return{ 
    pubFunction1:publicFunction 
    ,pubFunction2:pubFunction2 
    ,pubVariable:publicVariable 
    }; 
    }() 

//use as 
revealingPattern.pubFunction1(); 

基本上所有你是從封裝功能(revealingPattern)返回是包含一個名爲性能,這是該revealingPattern對象,你的公共接口的匿名對象允許使用。

然而,我對這種模式的抱怨是,它不會告訴你返回的對象中的屬性是函數還是變量!

所以如果你真的想要實現這個模式,你可能想重構你的代碼。否則,你幾乎可以採取任何你想要的方法。它們都是有效的,但不是揭示模塊模式。

+0

我的參考資料是這樣的:http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript – RyanP13 2011-04-04 09:34:17

+0

如果你向下滾動到The Revealing Module Pattern部分。 – RyanP13 2011-04-04 09:34:41

+1

我剛剛通過鏈接。實際上,即使在那裏它也描述了在這種模式下,關鍵是要返回一個包含指向你的公共函數的匿名對象。返回{set:setPerson,get:getPerson}的「return」語句就是這樣做的。所以基本上你不會返回函數調用返回myFunction(),而是返回一個包含對函數的「引用」作爲return {myFun:myFunction}的匿名對象。希望這解釋了一下 – Nikhil 2011-04-04 09:55:59

相關問題