如何使用多个变量来检索JS对象?

时间:2012-02-16 16:41:13

标签: javascript object

我只参与我的第三个Javascript项目,所以这可能很容易回答(至少我希望如此)。

我学会了用JS对象代替数组。在这个项目中,我使用嵌套的ID系统命名了多个对象,如下所示:

animalia = new Object();
animalia.chordata = new Object();
animalia.chordata.actinopterygii = new Object();
animalia.chordata.actinopterygii.acipenseriformes = new Object();
etc.......

我在调用以这种方式命名的对象时遇到了问题。这是我的代码:

function expand(event){
    var target = event.target;
    console.log(target);
    var parent = target.parentNode;
    console.log(parent);
    var parentclass = parent.getAttribute("class");
    console.log(parentclass);
    if (parentclass == "kingdom"){
        var newdiv = document.createElement("div");
        var newexpctrl = document.createElement("div");
        var parentid = parent.getAttribute("id");
        console.log(parentid);  
  ----> var parentobj = window[parentid];
        console.log(parentobj);}
    else{
        var upperclass = searchArray(parentclass);
        console.log(upperclass);
        var newdiv = document.createElement("div");
        var newexpctrl = document.createElement("div");
        var parentId = parent.getAttribute("id");
        console.log(parentId);
        var parentnode_ = document.getElementById(parentId);
        console.log(parentnode_);
        var gparentId = parentnode_.parentNode.id;
        console.log(gparentId);
  ----> var parentobj = window[gparentId.parentId];
        console.log(parentobj);
    }
    var childnumb = parentobj.children;
}

我遇到了“---->”所指示的两个陈述的问题。在第一种情况下,使用单个变量可以提取适当的对象。但是,在第二种情况下,使用两个变量,我无法访问正确的对象。这样做的正确语法是什么?我尝试过多种不同的语法组合,但似乎没有任何工作正常。或者除了使用“window [ variable ]”之外,还有更好的方法来调用JS对象吗?

P.S.-如果你现在还没弄明白,我正在研究用于学习生物学的教育工具。再次感谢stackoverflow,你们统治。

2 个答案:

答案 0 :(得分:3)

假设窗口对象的某些属性与字符串匹配的是gparentId的值,您应该可以这样做:

var parentobj = window[gparentId][parentId];

答案 1 :(得分:0)

这里的问题是方括号的符号应用太多了。 gparentId是一个字符串。它没有名为parentId的属性。因此,您必须分两步完成此操作。首先得到:

window[gparentId]

然后获取该对象的适当属性

var parentobj = window[gparentId][parentId];

在一个有些不相关的说明中,这不是很好的JavaScript代码:

创建对象

创建新对象时,请始终使用以下语法:

var obj = {};

这通常被认为是标准的,因此人们更容易阅读。

在If语句中声明变量

你不应该在if语句中声明变量,特别是在else块中声明相同的变量时,这确实令人困惑。相反,在列表顶部声明所有变量,然后使用它们而不降低var关键字。

var newdiv = document.createElement("div"),
  newexpctrl = document.createElement("div"),
  parentid = parent.getAttribute("id"),
  parentobj;

请注意逗号而不是分号,这意味着我不必重复var关键字。由于newdiv,newexpctrl和parentid的值在任何一种情况下都是相同的,我立即给它们的值,使if语句的内容更短,更容易消化。

结果

function expand(event){
    var target = event.target;
    var parent = target.parentNode;
    var parentclass = parent.getAttribute("class");

    var newdiv = document.createElement("div"),
      newexpctrl = document.createElement("div"),
      parentid = parent.getAttribute("id"),
      parentobj, upperclass;

    if (parentclass == "kingdom"){
        parentobj = window[parentid];
    }else{
        upperclass = searchArray(parentclass);
        var _parentId = document.getElementById(parentId).parentNode.id;
        parentobj = window[_parentId][parentId];
    }
    var childnumb = parentobj.children;
}

请注意,我已将var _parentId留在if中,因为我认为它可能会提高可读性,但您可以选择将其置于if之外,因为它会污染函数的命名空间。