名称空间和对象属性

时间:2013-01-27 20:34:37

标签: javascript coding-style namespaces

我已经开始学习Javascript作为开发非常简单的Firefox插件的一部分。 Firefox插件教程建议将所有函数和数据封装在命名空间中,如下所示。

if ("undefined" == typeof(XULSchoolChrome)) {
    var XULSchoolChrome = {};
};

XULSchoolChrome.BrowserOverlay = {
    first_name : new String,
    onmenuclick : function(aEvent) {
        // do something here
    }
};

我有几个与此相关的问题:

  1. 我知道XULSchoolChrome是一个名为BrowserOverlay的属性的对象。但那么first_nameonmenuclick是什么?它们是BrowserOverlay对象的子属性吗?
  2. 如果我需要访问first_name内部onmenucick功能,则必须完全限定XULSchoolChrome.BrowserOverlay.first_name。对于非平凡的代码,这很快就会变得难以处理。在Javascript中是否有一种更优雅的方式来模拟命名空间?
  3. 感谢。

1 个答案:

答案 0 :(得分:1)

  

但是什么是first_name和onmenuclick?

是的,它们是对象的属性,它是BrowserOverlay对象的XULSchoolChrome属性的引用。

  

在Javascript中是否有一种更优雅的方式来模拟命名空间?

不,您始终需要通过对象引用属性。但是,您可以将子命名空间缩写为变量:

var bo = XULSchoolChrome.BrowserOverlay;
// then use
bo.first_name…
bo.…

或者您可以使用"方法中的this keyword"命名空间对象。请注意,这不会直接用于事件处理函数,这些函数通常在不同的上下文中调用。