gpt4 book ai didi

Javascript - 共享指针范式

转载 作者:行者123 更新时间:2023-12-03 00:32:30 24 4
gpt4 key购买 nike

所以,我正在用 Javascript 编写一个 API。理想的要求包括它支持如下结构:

  • 有两个类:class Coreclass Public。两者都有成员 id
  • 不能存在多个具有相同 idCore 实例,但每个实例必须具有唯一的 id;但是,可能有任意数量的具有相同 idPublic 实例。
  • Public 实例每个都有对 Core 类实例的单个引用以及相应的 id 值。
  • 一旦指向它的最后一个 Public 实例被垃圾回收,Core 实例就应该被垃圾回收。
  • 因此,当创建新的 Public 实例并为其赋予 id 时,它会收集其引用并将其分配给现有的 Core 实例,如果存在,则为 Core 的新实例(如果不存在)。

并且最好(尽管不是绝对必要):

  • 当删除对 Core 实例的最后一个引用时,将运行其上的方法(即析构函数)

此外,正如我在 ES6 中编写的那样,WeakMaps、WebAssembly 和任何其他现代 JS API 都可以在答案中使用。

这种结构在 JavaScript 中可行吗?如果是这样,这种实现的结构是什么?或者说,这完全超出了 Javascript 的能力范围吗?

最佳答案

Is this structure possible in Javascript?

是的。然而,你不能以任何方式拦截垃圾收集,如果对一个对象的所有引用都丢失了,它就会悄然消失,没有人会注意到它。因此,如果你想注意到它,你必须明确地引起它:

 class Reference {
constructor(to) {
this.to = to;
to.link();
}

free() {
this.to.unlink();
this.to = undefined;
}
}

class Referenceable {
constructor() {
this.count = 0;
}

link() { this.count++ }
unlink() {
if(!(--this.count)) {
// your last words
}
}
}

关于Javascript - 共享指针范式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53796267/

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