gpt4 book ai didi

typescript - 如何打破 TypeScript 中的强引用循环?

转载 作者:搜寻专家 更新时间:2023-10-30 21:52:01 25 4
gpt4 key购买 nike

在一个实现中,我有一个带有父对象和子对象的树状结构。 parent 有一个 child 列表, children 有一个对他们 parent 的引用,以便能够轻松地在树中导航。现在我想知道这样的结构是否会被垃圾回收,因为我们这里有强引用循环(我不知道 TypeScript 中的弱指针)。

下面是这种结构的一个(非常简单的)示例,尽管我相信每个人都能想象它的样子:

class Symbol {
protected parent: Symbol | undefined;
protected children: Symbol[];
}

对于这种数据结构,推荐的方法是什么?使用(相对)新的 WeakMap 或 WeakSet 类来引用父类(这听起来很难看)?

最佳答案

表示树的方法有很多种,哪种最好取决于您对树结构的处理方式。
如果您满足于现在所拥有的并且只关心垃圾回收,那么为什么不为您的节点引入一个 remove 方法呢?

class MySymbol {
protected parent: MySymbol | undefined;
protected children: MySymbol[];

remove() {
this.children = [];
this.parent && this.parent.childRemoved(this);
}

childRemoved(child: MySymbol) {
this.children.splice(this.children.indexOf(child), 1);
}
}

(请注意,我将 Symbol 更改为 MySymbol 否则会出现重名错误)

这种方法只有在一个 child 只能有一个 parent 的情况下才有效,否则就必须稍微改变一下。


编辑

唯一可能给你类似的东西是使用 WeakMap为您的 child
另请阅读此处的答案:Creating a regular weak-reference in Javascript using WeakMaps

关于typescript - 如何打破 TypeScript 中的强引用循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42319020/

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