Javascript关联数组

Javascript关联数组,javascript,associative-array,Javascript,Associative Array,在我看来,这应该行得通,但我看不出到底是什么问题 Im接收错误为“未定义DDROA” 谁能帮我开导一下吗 var DDROA = { AllowedRoutes : { AR0 : {text : 'SomeText', value : 'SomeValue'}, AR1 : {text : 'SomeText2', value : 'SomeValue2'} }, RouteContext : { RC0 : {text

在我看来,这应该行得通,但我看不出到底是什么问题

Im接收错误为“未定义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
            )
        }
     }
}
编辑

请允许我发表评论 您能解释一下为什么我必须完成DDROA.AllowedRoutes的声明,然后在另一个语句中添加DDROA.RouteContext吗。基本上你是说我必须

var DDROA = {AllowedRoutes : {}};
然后

为什么这两种说法是不同的。我做的事情像

var Utilities = {
  TextBased : {
    someFunction : function(){ 
      //do stuff 
    },
    someFunction2 : function() {
      Utilities.TextBased.someFunction();
    }
  }
};

有什么区别?在我看来,我应该得到相同的错误?

您的
DDROA
变量仅在创建对象后才被赋值。
因此,当对象初始化时,
DDROA
未定义的

要解决此问题,应分别设置
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]



为了回答您编辑的问题,函数中的代码仅在调用函数时执行,即在分配变量之后执行。

第二个示例之所以有效,是因为您正在定义函数,因此函数中的代码在调用函数之前不会执行,此时您的对象被完全实例化,并且对子对象的引用是有效的。在您的第一个示例中,当您尝试访问该对象时,该对象还不存在。

您误用了
数组
构造函数。尝试此操作后,仍然得到相同的错误..相同的行。也许可以解释一下为什么您认为使用文字数组定义而不是new array()会起作用。如果传递一个非整数参数,数组构造函数将正确创建一个包含单个元素的数组。也就是说,最好的做法是避免它;o) Mike,我相信我已经证明了arry构造函数在传递单个非整数参数时不会创建包含单个元素的数组。要么你的评论措词错误,要么我不理解你的评论。@John:我把大括号嵌套错了。现在可以了。(我试过)迈克是对的;你的
Array
构造函数使用是有效的。懒虫,你能告诉我我编辑过的答案吗?我就是不明白。
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
    }        
};