weakset mapa crear javascript ecmascript-5 ecmascript-6

mapa - symbol() javascript



Implementación de WeakMap en EcmaScript5? (1)

Tardé un poco en asimilar el código, pero luego me golpeó: la clave en sí se usa para almacenar una referencia al valor.

Por ejemplo, varias capas en set lo hace

defProp(obj, globalID, { value: store });

donde defProp se ha definido como Object.defineProperty , obj es la clave, globalID es un guid y store es un objeto de almacenamiento que contiene el valor.

Luego hacia abajo en la get , busca el valor con

obj[globalID];

Esto es muy inteligente. El WeakMap no contiene realmente una referencia a nada (débil o de otro tipo), simplemente establece una política de dónde almacenar el valor en secreto. El uso de Object.defineProperty significa que no descubrirá accidentalmente el valor del almacenamiento, debe conocer la guía mágica para buscarlo.

Dado que la clave se refiere directamente al valor (y WeakMap no se refiere a él), cuando todas las referencias a la clave han desaparecido, se pone a GCed como normal.

Me he encontrado con una biblioteca de JavaScript que implementa un navegador WeakMap en ES5 . (WeakMap está programado para ES6 ).

¿Cómo puede funcionar esto sin soporte en el lenguaje JavaScript?

Edición: para que quede claro, me refiero a un mapa débil , no a un mapa regular. Probé este proyecto utilizando el generador de perfiles de Chrome y las claves no están respaldadas por referencias sólidas. Obtienen GC''ed sin tener que eliminarlos de WeakMap.