2010-04-23 75 views
1

在我看来,这应该工作,但我不能看到到底是什么问题。的Javascript关联数组

错误林接收是“没有定义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在一个单独的stament。从本质上讲,你告诉我,我必须

var DDROA = {AllowedRoutes : {}}; 

然后

DDROA.RouteContext = {}; 

为什么两个单独的语句。我做的事情就像

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

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

+1

你滥用'Array'构造。 – SLaks 2010-04-23 00:44:52

+0

请参阅我编辑的答案。 – SLaks 2010-04-23 01:14:54

回答

2

您的DDROA变量仅在之后被赋值该对象被创建。
因此,当对象被初始化时,DDROAundefined

要解决它,你应该设置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 ]


要回答你的问题,编辑,当函数被调用时,才会执行函数内部的代码,这是变量分配后。

+0

试过这个,仍然得到相同的错误..同样的线。也许有些探讨为什么你认为使用一个字面数组定义将工作,而不是新的Array()。 – 2010-04-23 00:50:27

+0

如果传递一个非整数参数,数组构造函数将正确地创建一个具有单个元素的数组。这就是说,可能是更好的做法,以避免它; O) – 2010-04-23 00:51:21

+0

迈克,我相信我已经证明,当通过一个非整数参数的构造函数ARRY不会与一个单一的元素创建一个数组。或者你想念你的评论,或者我不理解你的评论。 – 2010-04-23 00:54:09

0

你的第二个例子作品的原因是因为你定义一个函数,所以不执行其中的代码,直到你调用该函数,此时你的对象完全实例和参考子对象已验证。在您的第一个示例中,当您尝试访问它时,该对象不存在。