繁体   English   中英

在JavaScript中创建树状结构

[英]Create tree like structure in javascript

如何在javascript中引用对象? 我有以下代码:

// define nodes
var NodeA = new Object();
var NodeB = new Object();

NodeA = {
    name: "A",
    children: [
        NodeB
    ]
}

NodeB = {
    name: "B",
    children: []
};

var test = NodeA.children[0].name;
// How can I make test = "A" ???  <----------------
alert(test);

我知道,如果在创建NodeA之前先创建NodeB,它将解决我的问题。

您可以使用Object.assignNodeB分配属性,而不是将NodeB设置为对全新对象的引用:

 var NodeB = {}; var NodeA = { name: "A", children: [ NodeB ] } Object.assign( NodeB, { name: "B", children: [] } ); var test = NodeA.children[0].name; alert(test); 

请注意,要获得Object.assign Internet Explorer支持,您需要使用Polyfill 您也可以只将属性分配给现有对象,而不是使用对象文字符号来创建一个新的属性:

 var NodeB = {}; var NodeA = { name: "A", children: [ NodeB ] } NodeB.name = "B"; NodeB.children = []; var test = NodeA.children[0].name; alert(test); 

为什么不使用函数构造函数:

 function Node(name) { this.name = name, this.children = []; } var nodeA = new Node('A'), nodeB = new Node('B'); nodeA.children.push(nodeB); document.write(nodeA.children[0].name); document.write('<pre>' + JSON.stringify(nodeA, 0, 4) + '</pre>'); 

分配新值时,您将删除对象的引用,然后您将无法访问children数组内的对象

NodeB = {
    name: "B",
    children: []
};

您可以使用dot符号来分配新属性:

NodeB.name = "B";
NodeB.children = [];

例:

 var NodeA = new Object(); var NodeB = new Object(); NodeA = { name: "A", children: [ NodeB ] } NodeB.name = "B"; NodeB.children = []; var test = NodeA.children[0].name; alert(test); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM