1

我有一个自定义类,它调用本机方法在构造方法中分配缓冲区,如下所示:

MyClass = function () {
    this.buffer = native.alloc()
}

当 MyClass 的实例被删除时,缓冲区必须被释放。我可以像下面这样在 javascript 中定义析构函数吗?GC发生时会调用它吗?

MyClass.prototype.destructor = function () {
    native.free(this.buffer)
}
4

1 回答 1

0

如果您的问题是是否有本地方法来执行您所描述的操作,那么答案是 - 否。没有这样的方法。

如果您的问题 - 是否有可能以任何方式做到这一点,那么答案是 - 是的,这是可能的。

如果您控制项目的整个代码库,那么没有人会打扰您提出一种允许您仅使用 API 删除对象的架构。因此,如果这是您的 API,那么您可以为所欲为。

如果您不控制代码,那么有几种解决方法可以控制 JavaScript 中对象的工作。

首先要尝试的是proxy. 此 api 允许您控制对任何对象的所有操作,前提是您可以将指向该对象的原始链接替换为您的代理链接。

尝试的第二件事是使用Object.defineProperty. 如果对象的所有者没有特别费心地关闭对该 API 的访问,那么实际上您可以挂在其他人的对象上,任何代码量都可以让您根据需要控制其行为。

因此,您将能够实现您所询问的功能。

于 2021-05-12T03:59:14.380 回答