对象内部的 Javascript 对象
Javascript Object inside of Object
我正在使用系统发育树,我想要树本身的对象,然后每个物种都有一个对象,总共 4 个物种。我正在尝试让树包含 tree.leaf 下的物种对象,然后通过树对象为每个物种分配一个属性数组,因为我正在随机化物种的顺序,所以我不能依赖物种名称,但我可以使用叶子放置(希望这是有道理的(。我在更新 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];
}
我改变的东西:
- 使用javascript文字使定义更加紧凑
- 用于定义数组和对象的
{}
和[]
,而不是new Object()
和new Array()
。 for (var i = 0; i < xxx.length; i++)
语法仅用于迭代数组元素,而不是所有属性。 这是迭代数组元素的"安全"方法。- 卸下不需要
String(count)
。 Javascript在添加到另一个字符串时会自动将数字转换为字符串。 - 缓存了属性数组的值,以节省每次都必须深度引用它。
- 删除了单独的计数变量,因为可以使用
for
索引
要回答您的其他问题之一,当您执行此操作时:
tree.leaf1 = speciesA;
您已将"引用"分配给speciesA
tree.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
和tree.leaf1
指向同一对象。
在javascript中,数组,对象和字符串是通过引用分配的。 这意味着当你为变量赋值时,它只指向原始对象。 不制作副本。 因此,通过任何一个来更改对象将更改另一个(因为它们都指向同一对象(。 字符串是不可变的(字符串实际上永远不会更改(。 感觉像是对字符串进行修改的事情总是只返回一个新字符串,因此 javascript 的这一方面不会对字符串产生太大影响。 但是,知道数组和对象是通过引用分配的非常重要的。
相关文章:
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值