代码之家  ›  专栏  ›  技术社区  ›  John Hartsock

javascript关联数组

  •  1
  • John Hartsock  · 技术社区  · 14 年前

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

    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的声明,然后再做另一个语句,在单独的stament中添加ddroa.routeContext。实际上你是在告诉我我必须

    var DDROA = {AllowedRoutes : {}};
    

    然后

    DDROA.RouteContext = {};
    

    为什么这两个单独的陈述。我做的事情像

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

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   SLaks    14 年前

    你的 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 ] .


    要回答编辑过的问题,函数中的代码只在调用函数时执行,即在分配变量后执行。

        2
  •  0
  •   Blair Mitchelmore    14 年前

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