命名空间和对象属性

namespaces and object properties

本文关键字:属性 对象 命名空间      更新时间:2023-09-26

我已经开始学习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中的命名空间?
谢谢。

但是,什么是first_name和菜单点击?

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

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

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

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

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