当在 duktape 中删除/处置对象时,我该如何做一些清理工作?

How can I do some clean up jobs when an object is being deleted / disposed in duktape?

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

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

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

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

如果您的问题是是否有本机方法可以执行您描述的操作,那么答案是否定的。没有这样的方法。

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

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

如果您不控制代码,那么在 JavaScript.

中有几种解决方法可以控制对象的工作

首先要尝试的是proxy。这个api允许你控制对任何对象的所有操作,前提是你可以用你的link代理替换原来的link对象。

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

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