Tengo un programa que usa Javascript como un enlace de lenguaje de scripting a una aplicación C++ más grande. Uso V8 y Webkit de forma intercambiable, pero el tiempo de ejecución subyacente no debería importar para esta pregunta.Reglas de cierre de recolección de basura con Javascript
En esta aplicación, he creado dinámicamente objetos que recibirán devoluciones de llamada. Voy a crear esta unión como esta devolución de llamada ...
function f() {
var obj = CreateNewCallbackObj();
obj.onCallback = dowork; // dowork is a function
}
Es evidente que esto tendrá problemas porque GC obj ha ido fuera de alcance y se eliminará con el tiempo.
Lo que quiero es que el objeto administre por sí mismo su duración. El objeto eventualmente recibirá una devolución de llamada que señalará el final de su vida, y cuando eso suceda, puede eliminarse.
Una idea es autorreferencia agregando un obj.myself = obj. Parece una forma incorrecta de hacerlo, pero podría funcionar a menos que un algoritmo de recolección de basura sea inteligente.
¿Hay una forma correcta de hacerlo? No existe un DOM subyacente persistente creado para almacenar objetos, todos los objetos JS se asignan dinámicamente según sea necesario, pero necesitan cierta forma de mantenerse dentro del motor JS.