我正在努力理解将所有模块添加到单个命名空间的简单方法。
例如,我想在全局级别使用单个命名空间,但我的模块是该命名空间的子级
所以这就是我到目前为止所做的事情
在我的第一个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);
任何人都能解释原因吗?