Javascript - 共享指针范式
Javascript - Shared Pointer Paradigm
所以,我在 Javascript 中写了一个 API。理想的要求包括它支持这样的结构:
- 有两个 class:
class Core
和 class Public
。两者都有成员 id
.
- 不能存在具有相同
id
的 Core
的多个实例,但每个实例都必须具有唯一的 id
;但是,可能有任意数量的 Public
个实例具有相同的 id
.
Public
实例每个都有一个对 class Core
实例的引用,具有 id
. 的相应值
Core
个实例应在最后一个指向它的 Public
实例被垃圾回收后立即被垃圾回收。
- 因此,当创建一个新的
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 中写了一个 API。理想的要求包括它支持这样的结构:
- 有两个 class:
class Core
和class Public
。两者都有成员id
. - 不能存在具有相同
id
的Core
的多个实例,但每个实例都必须具有唯一的id
;但是,可能有任意数量的Public
个实例具有相同的id
. Public
实例每个都有一个对 classCore
实例的引用,具有id
. 的相应值
Core
个实例应在最后一个指向它的Public
实例被垃圾回收后立即被垃圾回收。- 因此,当创建一个新的
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
}
}
}