有没有一种“简洁”的方式在JavaScript中进行命名空间?

我经常遇到一些网站,它们把所有的JavaScript都放在namespace结构中:

namespaces = { com : { example: { example.com's data} }

但是,相对于其他名称空间框架安全地设置它似乎需要相对较多的代码(定义为> 2行)。 我想知道是否有人知道一个简洁的方法来做到这一点? 此外,是否有相对标准/一致的方式来构建它? 例如, com命名空间是直接连接到全局对象还是通过命名空间对象连接?

[编辑:whoops,显然{com = { ... } }不会完成任何接近我的意图的任务,这要感谢Shog9指出了这一点。]


Javascript没有独立的命名空间。 它具有可以提供解析名称范围的函数和对给定范围内可访问的指定数据有贡献的对象。

以下是您的示例,已更正:

var namespaces = { com: { example: { /* example.com's data */ } } }

这是一个变量namespaces被分配一个对象文字。 该对象包含一个属性: com ,一个具有一个属性的对象: example ,一个可能包含有趣的对象。

所以,你可以输入类似namespaces.com.example.somePropertyOrFunctionOnExample的东西,它会一切正常。 当然,这也很荒谬。 您没有分层名称空间,您的对象包含一个包含您实际关心的对象的对象。

var com_example_data = { /* example.com's data */ };

这同样适用,没有无意义的层次结构。

现在 ,如果你真的想建立一个层次结构,你可以尝试像这样:

com_example = com_example || {};
com_example.flags = com_example.flags || { active: false, restricted: true};

com_example.ops = com_example.ops || (function()
    {
       var launchCodes = "38925491753824"; // hidden / private
       return {
         activate: function() { /* ... */ },
         destroyTheWorld: function() { /* ... */ }
       };
    })();

...这是,恕我直言,合理简洁。


这是Peter Michaux关于Javascript命名空间的一篇有趣的文章。 他讨论了3种不同类型的Javascript命名空间:

  • 前缀命名空间
  • 单个对象命名空间
  • 嵌套对象命名空间
  • 我不会剽窃他在这里所说的,但我认为他的文章非常翔实。

    彼得甚至甚至指出,其中一些人有性能方面的考虑。 我认为这个话题很有意思,因为考虑到新的ECMAScript Harmony计划已经放弃了命名空间和包装的4.0计划。


    我试图按照雅虎的惯例在全球范围内制作单个父对象来包含所有内容;

    var FP = {};
    FP.module = {};
    FP.module.property = 'foo';
    
    链接地址: http://www.djcxy.com/p/95243.html

    上一篇: Is there a "concise" way to do namespacing in JavaScript?

    下一篇: AngularJS hide any parent div using ng