Supongamos que estoy escribiendo una clase A
en mi biblioteca basada en Jetpack (es decir, estamos hablando de cromo código/extensión):referencia débil en el código JavaScript de Firefox cromo
function A() {
//constructor
}
A.prototype = {
//class members
};
crea al usuario una instancia de la clase A
:
var a = new A();
ahora supongamos que quiero hacer un seguimiento de todos los casos de A
que fueron creados, que podía hacer:
var listA = [];
y añadir listA.push(this);
en el constructor de A
, para terminar con:
var listA = [];
function A() {
// constructor
listA.push(this);
}
A.prototype = {
// class members
};
todo está bien, hasta que el usuario de a
gotas su referencia (por ejemplo, a
sale del alcance). Ahora tengo un problema: listA
todavía contiene una referencia a a
por lo que nunca será basura recolectada. Además, no tengo manera de filtrar las instancias listA
de A
que de otra forma serían inalcanzables. Estoy efectivamente filtrando memoria.
Lo que necesitaría es presionar a listA
referencias débiles en lugar de las regulares. Creo que es posible hacerlo de alguna manera, pero realmente no sé a dónde ir desde aquí. Puedo imaginar algo como:
var weak_a = new weakRef(a);
assert(weak_a.ref === a);
Pero entonces yo no saber, por ejemplo, la forma de probar si una referencia débil sigue siendo válida. O cómo filtrar de manera eficiente las entradas débiles muertas en listA
. ¿Alguna sugerencia?
tan ... listA es miembro de? –
no. Edité la pregunta, espero que esté más claro ahora. – CAFxX