Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用多个变量检索JS对象?_Javascript_Object - Fatal编程技术网

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

Javascript 如何使用多个变量检索JS对象?,javascript,object,Javascript,Object,我只是在做我的第三个Javascript项目,所以这可能很容易回答(至少我希望如此) 我已经学会了用JS对象代替数组。在本项目中,我使用嵌套的ID系统命名了多个对象,如下所示: animalia = new Object(); animalia.chordata = new Object(); animalia.chordata.actinopterygii = new Object(); animalia.chordata.actinopterygii.acipenseriformes = n

我只是在做我的第三个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对象吗


如果你现在还没有弄明白,我正在研究学习生物学的教育工具。再次感谢stackoverflow,由你们来决定。

假设window对象具有与gparentId值字符串匹配的属性,您应该能够执行以下操作:

var parentobj = window[gparentId][parentId];

这里的问题是,方括号的表示法被应用于太多。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语句的内容更短,更容易理解

结果
请注意,我将var\u parentId放在if中,因为我认为它可能会提高可读性,但您可以选择将其放在if之外,因为它无论如何都会污染函数的名称空间。

使用
{}
代替
新对象()
。实际上,我只有“=new Object;”。我把代码放在stackoverflow上时输入错误。这些对象在调试器中显示为对象时仍然有效。这是一样的。我只是提个建议。这真的与问题无关,我会记住的。谢谢,这很有效。这件事很简单,但我好几个小时都找不到答案。
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;
}