JavaScript WeakMaps
Introduction
A WeakMap is a Map that doesn’t prevent its keys from being garbage-collected. That means that you can associate data with objects without having to worry about memory leaks.
Example
//----- Manage listeners
const _objToListeners = new WeakMap()
function addListener(obj, listener) {
if (!_objToListeners.has(obj)) {
_objToListeners.set(obj, new Set())
}
_objToListeners.get(obj).add(listener)
}
function triggerListeners(obj) {
const listeners = _objToListeners.get(obj)
if (listeners) {
for (const listener of listeners) {
listener()
}
}
}
//----- Example: attach listeners to an object
const obj = {}
addListener(obj, () => console.log("hello"))
addListener(obj, () => console.log("world"))
//----- Example: trigger listeners
triggerListeners(obj)