profileRyan KesPGP keyI build stuffEmailGithubTwitterLast.fmMastodonMatrix

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)