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

时间:2011-11-08 09:43:08

标签: javascript namespaces code-organization

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

var myApp = {};

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

//Bar chart module code
org.example.chart.bar.module
org.example.chart.bar.model
org.example.chart.bar.view
org.example.chart.bar.controller

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

org.example.data.dataSource
org.example.data.dataManager //populates the dataSource with CSV data

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

org.example.static.translations
org.example.static.settings

您如何(重新)组织这个以便我可以轻松访问应用程序级单例(例如dataSource,dataManager,翻译等),并且可以轻松实例化当前应用程序范围内的可重用模块实例吗

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

3 个答案:

答案 0 :(得分:1)

不,我们没有命名空间。我们编写模块化代码,我们使用模块加载器。

模块加载器的示例为require.jsbrowserifyseajs

示例模块类似于:

(function () {
  var jQuery = require("jQuery");
  var chart = require("chart"); 

  ...

  define("moduleName", moduleObject);
})();

答案 1 :(得分:0)

没有什么可以阻止你在课堂上添加另一个名字。例如。

 org.ds = org.example.data.dataSource;

然后你可以打电话

 org.ds.getDatasource();

而不是

 org.example.data.dataSource.getDatasource();

但两者仍然有效。

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

 var dataSource = function () { return org.example.data.dataSource.getDatasource(); };

答案 2 :(得分:0)