2012-03-20 17 views
2

JSでモジュールパターンを使用しようとしています。しかし、HM.init()をコンソールに呼び出すと、undefinedと表示されます。 this.carouselがまったく存在しないようです。何故ですか?モジュールをjavascriptのモジュールパターンで拡張する

JS:

(function(window, $){ 

    var HM = (function (HM) { 

     HM.init = function(){ 
      this.carousel.init(); 
     } 

     return HM; 

    })(HM || {}); 

    window.HM = HM; 

    $(function(){ 
     console.log(HM.init()); // this doesn't work 
    }); 


})(window, jQuery); 

//Extending module (this is supposed to be in another file) 
(function(window, HM, $){ 
    HM.carousel = { 
     init: function(){ 
      return 'initialise HM'; 
     } 
    } 
})(window, HM, jQuery);. 

感謝

答えて

4

それはHM.initは(undefinedを返すにノーとreturn声明ので、デフォルトで)何も返さないためundefinedが出力した理由。

あなたがそうのように、this.carousel.init()の呼び出しの前returnを追加する次のいずれかの

... 
HM.init = function(){ 
    return this.carousel.init(); 
} 
... 

...またはあなたが「HMを初期化する」印刷する場合は、あなたのHM.carousel.init関数内代わりconsole.logを使用したいですコンソールへ:

... 
HM.carousel = { 
    init: function(){ 
     return 'initialise HM'; 
    } 
} 
... 

(自身で戻り値が良いデバッグツールではありませんので、それはおそらくconsole.logでそれを印刷するには、より理にかなっています。)

+0

あなたのお返事ありがとうございました。私はコードを更新しましたが、それはまだ動作しません。コードをチェックしてください。 – Shaoz

+0

右問題は 'HM.init'が何も返さないということです。 'HM.init'の中で' return this.carousel.init() 'がうまくいくはずです。 'console.log'と置き換えることで、' return 'initialise HM'を例えば ' 'console.log( 'initialise HM')'(デバッグ出力だけと仮定し、実際にはそれを返す必要はありません)。混乱して申し訳ありません:P – FireFly

+0

もう一度おねがいしますが、このプロジェクトではこのコードは他のすべてのモジュールが初期化されるコアとなるため、各モジュールごとにリターンを行うのはちょっと面倒です。たとえば、カルーセルモジュールもタブ、アコーディオンなどのように作成されます...私は当然のことながら、それぞれのリターンは変です。 – Shaoz

関連する問題