在javascript中以模块模式扩展模块

时间:2012-03-20 15:51:21

标签: javascript design-patterns

我试图用JS模块模式。但是当我在控制台中调用HM.init()时,它会显示undefined。这就像this.carousel根本不存在。那是为什么?

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);.

非常感谢

1 个答案:

答案 0 :(得分:4)

它打印undefined的原因是因为HM.init没有返回任何内容(没有return语句,因此它默认返回undefined)。

要么在调用return之前添加this.carousel.init(),请执行以下操作:

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

...或者您想在console.log函数中使用HM.carousel.init,如果您想将'initialise HM'打印到控制台:

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

(返回值本身不是一个好的调试工具,所以用console.log打印它可能更有意义。)