我有一个自定义类,它调用本机方法在构造方法中分配缓冲区,如下所示:
MyClass = function () {
this.buffer = native.alloc()
}
当 MyClass 的实例被删除时,缓冲区必须被释放。我可以像下面这样在 javascript 中定义析构函数吗?GC发生时会调用它吗?
MyClass.prototype.destructor = function () {
native.free(this.buffer)
}
我有一个自定义类,它调用本机方法在构造方法中分配缓冲区,如下所示:
MyClass = function () {
this.buffer = native.alloc()
}
当 MyClass 的实例被删除时,缓冲区必须被释放。我可以像下面这样在 javascript 中定义析构函数吗?GC发生时会调用它吗?
MyClass.prototype.destructor = function () {
native.free(this.buffer)
}
如果您的问题是是否有本地方法来执行您所描述的操作,那么答案是 - 否。没有这样的方法。
如果您的问题 - 是否有可能以任何方式做到这一点,那么答案是 - 是的,这是可能的。
如果您控制项目的整个代码库,那么没有人会打扰您提出一种允许您仅使用 API 删除对象的架构。因此,如果这是您的 API,那么您可以为所欲为。
如果您不控制代码,那么有几种解决方法可以控制 JavaScript 中对象的工作。
首先要尝试的是proxy
. 此 api 允许您控制对任何对象的所有操作,前提是您可以将指向该对象的原始链接替换为您的代理链接。
尝试的第二件事是使用Object.defineProperty
. 如果对象的所有者没有特别费心地关闭对该 API 的访问,那么实际上您可以挂在其他人的对象上,任何代码量都可以让您根据需要控制其行为。
因此,您将能够实现您所询问的功能。