名称空间与在不同js文件中定义的多个模块混淆

时间:2014-11-14 11:30:00

标签: javascript namespaces

我正在努力理解将所有模块添加到单个命名空间的简单方法。

例如,我想在全局级别使用单个命名空间,但我的模块是该命名空间的子级

所以这就是我到目前为止所做的事情

在我的第一个JS文件中,我已经完成了这个

var MyRootNamespace = window.MyRootNamespace  || (window.MyRootNamespace = {});

(function() {
    MyRootNamespace.EventBus = (function () {

    ...

    })();
})();

在另一个JS文件中定义的另一个模块中我有

(function() {

    jQuery(document).ready(function() {
        MyRootNamespace.EventBus.publish(...);
    });

})();

麻烦的是,EventBus正在解析为未定义。 MyRootNamespace存在于全局命名空间中,但经过检查,MyRootNamespace命名空间中不存在EventBus

虽然我理解命名空间的概念,但我很难理解如何为应用程序创建一个干净的命名空间。

谢谢

我刚刚发现,如果在模块中执行以下操作,并且传入的引用都可以正常工作。

(function(BUS) {

    jQuery(document).ready(function() {
        BUS.EventBus.publish(...);
    });

})(MyRootNamespace.EventBus);

任何人都能解释原因吗?

0 个答案:

没有答案