JavaScript对象文字使用它自己的字段
javascript object literals using it's own fields
我想创建一个包含某个组件的整个配置的对象。我也希望它是这样的:
var ObjectConfig = {
fieldKeys : {
name: "Obj. name",
state: "Obj. state",
color: "Obj. color"
},
templates : {
basicTemplate : [ ObjectConfig.fieldKeys.name, ObjectConfig.fieldKeys.state ],
altTemplate : [ ObjectConfig.fieldKeys.name, ObjectConfig.fieldKeys.color ]
}
}
但这以正确的方式做到这一点 - 它不起作用。我怎样才能实现我的目标?
编辑:抱歉,我匆忙手写,这就是语法错误的来源。现在它是正确的。我得到的错误是Uncaught TypeError: Cannot read property 'fieldKeys' of undefined
.我想这样做是不可能的——那么最好的选择是什么?
您的问题是对象是在分配给ObjectConfig
变量之前从文字构造的。因此,访问文本中的ObjectConfig.fieldKeys
将导致错误。
最好的解决方案是仅构造第一个对象,然后按顺序添加更多属性:
var ObjectConfig = {
fieldKeys: {
name: "Obj. name",
state: "Obj. state",
color: "Obj. color"
}
};
ObjectConfig.templates = {
basicTemplate: [ ObjectConfig.fieldKeys.name, ObjectConfig.fieldKeys.state ],
altTemplate: [ ObjectConfig.fieldKeys.name, ObjectConfig.fieldKeys.color ]
};
另一种(较短的)方法是为 keys 对象创建一个额外的变量,该变量是在构造模板对象之前分配的:
var keys, ObjectConfig = {
fieldKeys: keys = {
name: "Obj. name",
state: "Obj. state",
color: "Obj. color"
},
templates: {
basicTemplate: [ keys.name, keys.state ],
altTemplate: [ keys.name, keys.color ]
}
};
若要在全局范围内解决额外变量,可以使用 IEFE。一个更具可读性的解决方案可能如下所示:
var ObjectConfig = (function() {
var keys = {
name: "Obj. name",
state: "Obj. state",
color: "Obj. color"
};
return {
fieldKeys: keys,
templates: {
basicTemplate: [ keys.name, keys.state ],
altTemplate: [ keys.name, keys.color ]
}
};
})();
相关文章:
- 如何将 screen.width 值替换为我自己定义的值
- 具有自己数据源的可重用成员组件
- 需要创建一个函数,将我自己创建的范围对象转换为字符串
- 为什么像angular这样的项目有自己版本的通用函数
- 在 Javascript 中创建具有自己属性的对象数组
- 从 2 个得分最高的节点列表中获取 3 个节点(我自己设置的属性)
- 如何使用LinkedIn Javascript API作为我自己网站的登录名
- 跨源 - 带有来自自己域的图像的黑色纹理
- 我自己网站的内容管理系统
- 设计:为什么JavaScript有单独的Function和Object对象,以及为什么它们有自己单独的原型对象
- 组合已经具有自己属性的方法(使用原型属性)
- 在自己编写的Javascript日历中更改年份
- 使用嵌入自己网站的小工具从Soundcloud获取歌曲
- SimpleWebRTC使用自己的带宽提供服务,或者它在我的主机上
- 我如何才能在Angular.js中自己定义的服务上获得拦截器的响应
- 如何使用javascript或jquery迭代自己制作的xhtml节点
- 基本脚本,它向自己发送一封包含从文件文件夹中随机选择的内容的邮件
- 我怎样才能调用与自己不同的Node.js脚本呢
- 我如何在我的网站上使用我自己定制的Sharethis图片和Sharethis插件
- 弹出窗口显示在IE8的标签,但我需要它在自己的窗口