wiki/content/20201012094749-javascript_weakmaps.md

1,021 B
Raw Blame History

date id title
20201012 e06279b3-4488-40b1-b822-fca19b47089a JavaScript WeakMaps

Introduction

A WeakMap is a Map that doesnt 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);