我应该如何看待我的JavaScript应用程序命名空间?

dan*_*ani 5 javascript namespaces code-organization

我正在构建一个具有单个全局命名空间的应用程序,如下所示:

var myApp = {};
Run Code Online (Sandbox Code Playgroud)

然后,我有一堆不同的可重用"模块",包括模型,视图和控制器.

//Bar chart module code
org.example.chart.bar.module
org.example.chart.bar.model
org.example.chart.bar.view
org.example.chart.bar.controller
Run Code Online (Sandbox Code Playgroud)

我还有一个大的dataSource单例和一个dataManager,用于将数据加载到dataSource:

org.example.data.dataSource
org.example.data.dataManager //populates the dataSource with CSV data
Run Code Online (Sandbox Code Playgroud)

最后,应用程序中应该提供的翻译字符串和设置:

org.example.static.translations
org.example.static.settings
Run Code Online (Sandbox Code Playgroud)

您如何(重新)组织这个以便我可以轻松访问应用程序级单例(例如dataSource,dataManager,翻译等)并且可以轻松实例化在当前应用程序实例下获取作用域的可重用模块?

(例如,你是否已经从一开始就为你的"类"和你的应用程序使用相同的命名空间?或者你可能会像这样引用:myApp.translations = org.example.static.translations?)

kam*_*mui 0

没有什么可以阻止您向班级添加另一个名称。例如。

 org.ds = org.example.data.dataSource;
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话

 org.ds.getDatasource();
Run Code Online (Sandbox Code Playgroud)

代替

 org.example.data.dataSource.getDatasource();
Run Code Online (Sandbox Code Playgroud)

但两者仍然有效。

编辑:您还可以创建其他更简单的函数来调用它,将其从 oo 结构中取出

 var dataSource = function () { return org.example.data.dataSource.getDatasource(); };
Run Code Online (Sandbox Code Playgroud)