我有一个程序,它使用JavaScript作为脚本语言与一个更大的C++应用程序进行绑定。我会交替使用V8和webkit,但是对于这个问题来说,底层运行时不应该有影响。
在这个应用程序中,我动态创建的对象将接收回调。我将像这样创建此回调绑定...
function f() {
var obj = CreateNewCallbackObj();
obj.onCallback = dowork; // dowork is a function
}
很明显,这将会有垃圾回收问题,因为obj已经超出了范围并最终将被删除。
我的想法是让对象自我管理其生命周期。该对象最终将接收到一个回调,该回调将标志着它的生命周期结束,当发生这种情况时,它可以自行删除。
一种想法是通过添加obj.myself=obj来进行自引用。这似乎不是正确的方法,但如果垃圾回收算法很聪明,它可能会起作用。
有没有正确的方法来解决这个问题?没有底层的持久DOM可用于存储对象,所有JS对象都是根据需要动态分配的,但需要某种方式在JS引擎内保留这些对象。