对象内部的Javascript对象

对象内部的Javascript对象,javascript,html,object,Javascript,Html,Object,我正在研究进化树,我想要一个树本身的对象,然后是每个物种的对象,总共4个物种。我试图让树包含tree.leaf下的物种对象,然后通过tree对象为每个物种分配一个属性数组,因为我随机化了物种的顺序,所以我不能依赖于物种名称,但我可以使用叶子放置(希望有意义)。我在更新html时遇到了问题,尽管html是表中的一个div 简化版: var tree = new Object(); var speciesA = new Object(); tree.leaf1 = speciesA; //Not

我正在研究进化树,我想要一个树本身的对象,然后是每个物种的对象,总共4个物种。我试图让树包含tree.leaf下的物种对象,然后通过tree对象为每个物种分配一个属性数组,因为我随机化了物种的顺序,所以我不能依赖于物种名称,但我可以使用叶子放置(希望有意义)。我在更新html时遇到了问题,尽管html是表中的一个div

简化版:

var tree = new Object();
var speciesA = new Object();

tree.leaf1 = speciesA;
//Not sure if this next line assigns to speciesA or what exactly happens
tree.leaf1.attributes = new Array("Attr1","Attr2",etc);

var count = 1;
for(attr in speciesA.attributes)
{
    //There are 4 divs per speices to display attributes
    document.getElementById("A"+String(count)).innerhtml = speciesA.attributes[attr];
    count++;// used to specify divs ie A1 = attribute1, A2 = attribute2 etc
}
所以我想我的主要问题是,这会起作用吗


如果需要,我可以粘贴我的html和完整的js文件。

你所拥有的应该可以工作,但可以写得更干净一些。我建议:

var tree = {
    leaf1: {attributes: ["Attr1", "Attr2"]}
};

var attributes = tree.leaf1.attributes;
for (var i = 0; i < attributes.length; i++) {
    document.getElementById("A"+(i+1)).innerHTML = attributes[i];
}
您已经为
规格a
分配了一个“参考”到
树。left1
。引用就像一个指针。它不是复制品。因此,两者都指的是完全相同的对象。对
speciesA
tree.leaf1
所做的任何更改都是对完全相同的对象进行更改

因此,当您执行此操作时:

//Not sure if this next line assigns to speciesA or what exactly happens
tree.leaf1.attributes = new Array("Attr1","Attr2",etc);
您确实在修改
speciesA
对象,因为
speciesA
树。leaf1
指向同一个对象



在javascript中,数组、对象和字符串是通过引用分配的。这意味着当你给一个变量赋值时,它只指向原始对象。没有复印件。因此,通过其中一个更改对象将更改另一个(因为它们都指向同一个对象)。字符串是不可变的(字符串实际上从未更改)。感觉像是对字符串进行修改的东西总是返回一个新字符串,所以javascript的这一方面不会对字符串产生太大的影响。但是,知道数组和对象是通过引用分配的是非常重要的。

您的方法很好,但我会选择Object Literal而不是您的方法。这将更容易实现。谢谢。事实证明,我只是在代码中添加了一个switch语句,使用了int而不是应该使用的字符串。不过,感谢您的澄清,我正在学习javascript和html,不确定我是否可以像以前那样访问属性。
//Not sure if this next line assigns to speciesA or what exactly happens
tree.leaf1.attributes = new Array("Attr1","Attr2",etc);