gpt4 book ai didi

Javascript 原型(prototype)作用域和递归问题

转载 作者:行者123 更新时间:2023-11-30 13:06:47 26 4
gpt4 key购买 nike

所以我认为我在 javascipt 作用域和原型(prototype)领域掉下了悬崖。我正在尝试用对象构建一个简单的树结构。 build 这棵树是没有问题的,但是当我试图让所有的 child 都在一起时,我似乎无法将它们连接在一起。我已经遍历了代码,似乎发生了一些奇怪的范围界定问题,我无法弄清楚。这是我的代码:

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);

我在这里创建了一个 fiddle 来显示上面代码的结果 http://jsfiddle.net/e2zf8/1/

getAllChildren 函数只为 foo1 返回一个包含一个 Foo 的列表,而它应该返回一个包含两个 Foo 的列表。 (是的,Foo 是 Foo 的复数形式)。它似乎与递归、作用域和原型(prototype)作用域有关。我似乎无法查明我的错误,任何帮助(或我的问题)都会有所帮助。

最佳答案

不,范围界定和原型(prototype)都没有问题。

只有 array concat method不会修改它所应用的数组,而是返回串联的新数组。您的代码保持 childs 不变。两种可能性:

  • 使用 childs = childs.concat(…) 每次用新数组覆盖 childs
  • 使用循环或 [].push.apply(childs, this.children[i] 将每个 getAllChildren 推送到您的 childs 数组.getAllChildren()).

关于Javascript 原型(prototype)作用域和递归问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15391855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com