所以我认为我在 javascipt 范围界定和原型领域掉下了悬崖。我正在尝试用对象构建一个简单的树结构。构建树没有问题,但是当我尝试让所有孩子一起时,我似乎无法将它们连接在一起。我已经浏览了代码,似乎正在发生一些奇怪的范围界定问题,我无法弄清楚。这是我的代码:
var Foo = function (value) {
this.value = value;
this.children = [];
}
Foo.prototype.getAllChildren = function () {
var childs = [];
for (var i = 0; i < this.children.length; i++) {
childs.push(this.children[i]);
childs.concat(this.children[i].getAllChildren());
}
return childs;
};
var foo1 = new Foo(1),
foo2 = new Foo(2),
foo3 = new Foo(3);
foo1.children.push(foo2);
foo2.children.push(foo3);
var children = foo1.getAllChildren(),
expected = foo1.children.concat(foo2.children);
我在这里创建了一个小提琴,显示了上面http://jsfiddle.net/e2zf8/1/代码的结果
当 getAllChildren 函数应该返回一个包含两个 Foo 的列表时,它只为 foo1 返回一个包含一个 Foo 的列表。(是的,Foo 是 Foo 的复数形式)。它似乎与递归、作用域和原型作用域有关。我似乎无法确定我的错误,任何帮助(或我的问题)都会有所帮助。