1

作为开发非常简单的 Firefox 插件的一部分,我开始学习 Javascript。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 中模拟命名空间?
谢谢。

4

1 回答 1

1

但是什么是 first_name 和 onmenuclick?

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

有没有更优雅的方式在 Javascript 中模拟命名空间?

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

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

或者您可以使用命名空间对象的“方法”中的this关键字。请注意,这不适用于通常在不同上下文中调用的事件处理函数。

于 2013-01-27T20:53:14.887 回答