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();
};

そのため、個々のメソッドへの呼び出しが 2 つあります。このコードは問題なく動作しますが、もっとうまくできるのではないかと思いませんか?

これらの両方を返すにはどうすればよいですか?それらを返すのが最善の方法ですか?

ありがとう。

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 に答える