你的问题是该对象是根据文字构造的before它被分配给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 ]
};
另一种(较短的)方法是为键对象添加一个额外的变量,该变量在构造模板对象之前分配:
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 ]
}
};
})();