function Luminary(radius, orbitRadius, speed, children) {
this.radius = radius;
this.orbitRadius = orbitRadius;
this.speed = speed;
this.children = children;
}
function initSolarSystem() {
var moon = new Luminary(0.02, 0.2, 0.0015, []);
var earth = new Luminary(0.1, 0.7, 0.001, [moon]);
var sun = new Luminary(0.3, 0.0, 0.0, [earth]);
return sun;
}
var solarSystem = initSolarSystem();
我在JS中有上面的代码。如何使用 solarSystem 对象访问例如地球半径?以下内容返回未定义
alert(solarSystem.children.radius);
如何在递归函数中调用子进程如下:
function draw(obj) {
// draw Current Object
if (obj.children != undefined) {
draw(obj.children);
}
}
draw(solarSystem);
有人可以帮帮我吗?
答案 0 :(得分:3)
我在JS中有上面的代码。我如何访问例如半径 使用solarSystem对象的地球?以下内容返回Undefined 警报(solarSystem.children.radius);
solarSystem.children
是一个数组,因此请使用solarSystem.children[0].radius
如何在递归函数中调用子进程如下。
function draw(obj)
{
// draw Current Object
if (obj.children != undefined)
{
obj.children.forEach( s => draw(s) ); //invoke draw in a loop
//draw(obj.children[0]); //use
}
}
draw(solarSystem);
答案 1 :(得分:2)
首先,您的.children
是一个数组。所以请致电.children[i].radius
第二:
if (obj.children != undefined) { draw(obj.children); }
您在此处调用完整children
数组的绘制函数。所以你需要实现一个for循环。
为此,我的方法有很多选择:
function Luminary(name, radius, orbitRadius, speed, children = []) {
this.name = name;
this.radius = radius;
this.orbitRadius = orbitRadius;
this.speed = speed;
this.children = children;
}
function initSolarSystem() {
var moon = new Luminary("moon", 0.02, 0.2, 0.0015);
var earth = new Luminary("earth", 0.1, 0.7, 0.001, [moon]);
var sun = new Luminary("sun", 0.3, 0.0, 0.0, [earth]);
return sun;
}
var solarSystem = initSolarSystem();
function draw(obj) {
// Draw current object.
for (let key in obj.children)
if (obj.children.hasOwnProperty(key)) {
//if (typeof(obj.children) == "array") {
console.log(obj.children[key].radius);
draw(obj.children[key]);
}
}
draw(solarSystem);