0

我正在为当前项目尝试揭示模块模式。

我在几个方法的顶部有init方法,在这些方法中我设置了变量和调用方法,以便模块在它们被适当的事件处理程序调用时正确运行。

我有一个目前看起来像这样的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();
};

所以现在有两个单独的方法调用。这段代码工作正常,但想知道它是否可以更整洁?

我如何退回这两个?归还他们是打电话给他们的最佳方式吗?

谢谢。

4

1 回答 1

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 对象的公共接口。

然而,我对这种模式的不满是它不会告诉您返回对象中的属性是函数还是变量!

因此,如果您真的想实现该模式,您可能需要稍微重构您的代码。否则,您几乎可以采取任何您想要的方法。它们都是有效的,但不是揭示模块模式。

于 2011-04-04T09:29:42.180 回答