我已经开始学习Javascript作为开发非常简单的Firefox插件的一部分。 Firefox插件教程建议将所有函数和数据封装在命名空间中,如下所示。
if ("undefined" == typeof(XULSchoolChrome)) {
var XULSchoolChrome = {};
};
XULSchoolChrome.BrowserOverlay = {
first_name : new String,
onmenuclick : function(aEvent) {
// do something here
}
};
我有几个与此相关的问题:
XULSchoolChrome
是一个名为BrowserOverlay
的属性的对象。但那么first_name
和onmenuclick
是什么?它们是BrowserOverlay
对象的子属性吗?first_name
内部onmenucick
功能,则必须完全限定XULSchoolChrome.BrowserOverlay.first_name
。对于非平凡的代码,这很快就会变得难以处理。在Javascript中是否有一种更优雅的方式来模拟命名空间?
答案 0 :(得分:1)
但是什么是first_name和onmenuclick?
是的,它们是对象的属性,它是BrowserOverlay
对象的XULSchoolChrome
属性的引用。
在Javascript中是否有一种更优雅的方式来模拟命名空间?
不,您始终需要通过对象引用属性。但是,您可以将子命名空间缩写为变量:
var bo = XULSchoolChrome.BrowserOverlay;
// then use
bo.first_name…
bo.…
或者您可以使用"方法中的this
keyword"命名空间对象。请注意,这不会直接用于事件处理函数,这些函数通常在不同的上下文中调用。