命名空间和对象属性
namespaces and object properties
我已经开始学习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中的命名空间?
但是,什么是first_name和菜单点击?
是的,它们是对象的属性,由XULSchoolChrome
对象的 BrowserOverlay
属性引用。
有没有一种更优雅的方式来模拟Javascript中的命名空间?
否,您始终需要通过对象引用属性。但是,您可以将子命名空间缩写为变量:
var bo = XULSchoolChrome.BrowserOverlay;
// then use
bo.first_name…
bo.…
或者,您可以使用命名空间对象的"方法"中的 this
关键字。请注意,这不适用于事件处理程序函数,这些函数通常在不同的上下文中调用。
相关文章:
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 使用onclick调用属性对象函数
- 嵌套为..in 循环,列出多维对象的属性(对象)
- 动态属性对象 - JSON
- 在不使用隔离范围angularjs自定义指令的情况下获取属性对象
- 通过属性传递属性/对象.Javascript
- Javascript:属性/对象的类型
- 访问JSON中的属性(对象)
- 属性对象Javascript不是用Jquery Deferred设置的
- 无法读取属性'#<对象>'未定义的获取错误
- Twitter中多属性对象的子字符串匹配
- 无法设置'data'属性'对象'标记.(只IE8)
- 更新数据属性对象属性值
- 将属性对象的选定对象从原型推入数组
- 将单个属性对象字面量的数组转换为仅包含其值的数组的最佳方法
- 寻找一种更简单的方法来检查是否多个属性&对象中的方法是未定义的
- 主干模型:带有get方法的空属性,但在属性对象中
- 如何赋值给"text"someText"属性对象在动能js
- Angularjs的数据绑定与数据属性对象
- 如何将一个嵌套的javascript对象转换为只有一级属性对象