在我看来这应该可行,但我看不出问题到底是什么。
我收到的错误是“未定义 DDROA”
谁能帮我解答一下。
var DDROA = {
AllowedRoutes : {
AR0 : {text : 'SomeText', value : 'SomeValue'},
AR1 : {text : 'SomeText2', value : 'SomeValue2'}
},
RouteContext : {
RC0 : {text : 'None', value : '0',
AllowedRoutes : new Array(
DDROA.AllowedRoutes.AR0 // An error occurs here
)
}
}
}
编辑
对于 Slack 的评论 你能帮忙解释一下为什么我必须完成 DDROA.AllowedRoutes 的声明,然后再声明在单独的 stament 中添加 DDROA.RouteContext 吗?本质上你是在告诉我我必须
var DDROA = {AllowedRoutes : {}};
然后
DDROA.RouteContext = {};
为什么两个单独的声明。我做类似的事情
var Utilities = {
TextBased : {
someFunction : function(){
//do stuff
},
someFunction2 : function() {
Utilities.TextBased.someFunction();
}
}
};
有什么区别?在我看来我应该得到同样的错误?
最佳答案
您的 DDROA
变量仅在对象创建后被赋值。
因此,当对象被初始化时,DDROA
是undefined
。
要解决它,您应该单独设置 RouteContext
,如下所示:
var DDROA = {
AllowedRoutes : {
AR0 : {text : 'SomeText', value : 'SomeValue'},
AR1 : {text : 'SomeText2', value : 'SomeValue2'}
}
};
DDROA.RouteContext = {
RC0 : {text : 'None', value : '0',
AllowedRoutes : [ DDROA.AllowedRoutes.AR0 ] //An error does not occur here
}
};
此外,当给定单个参数时,Array
构造函数采用数组的长度。
要创建包含单个元素的数组,请使用数组字面量,例如 [ DDROA.AllowedRoutes.AR0 ]
。
要回答您编辑的问题,函数内的代码仅在调用函数时执行,即在分配变量之后。
关于Javascript 关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2695476/