如何使用多个变量来检索JS对象
How can I use multiple variables to retrieve JS objects?
我只在做我的第三个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,你们统治。
假设窗口对象具有与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语句的内容更短、更容易消化。
结果
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之外,因为它无论如何都会污染函数的命名空间。
- 在Node.js中上传和检索图像
- 如何在.js函数中检索来自其他模板的表单的目标值
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- MeteorJS从上一个函数中检索JS中的结果
- 使用 Node-MYSQL 检索 MYSQl 数据库中最新的 X 个条目量?节点.js
- 节点.js哈希,检索密钥
- 拖放区.js禁止从服务器检索时的进度条
- 如何使用地点ID从Google Places JS API检索地点详细信息
- 如何使用Angular.js在页面上显示从JSON检索到的图像
- 如何从Mysql检索变量并在JS中的函数中使用它
- Facebook js-sdk可以't检索已登录用户的名称
- 从textbox中检索值并传递给js
- 从嵌套的JSON中检索数据到Morris.js xkey
- 使用 innerHTML 和 vanilla JS 检索节点的内容
- 使用 meteor.js从 MonoDB 检索数字数组
- 检索 JS' 的对象值,而不知道它的名称
- 如何使用多个变量来检索JS对象
- 检索JS函数值
- 在PHP中检索JS数据
- 检索JS变量