wiki/content/20201012094749-javascript_weakmaps.md

46 lines
1,021 B
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date: 20201012
id: e06279b3-4488-40b1-b822-fca19b47089a
title: JavaScript WeakMaps
---
# Introduction
A WeakMap is a [Map](20201012093745-javascript_maps) that doesnt
prevent its keys from being garbage-collected. That means that you can
associate data with [objects](20200826201605-objects) without having to
worry about memory leaks.
# Example
``` javascript
//----- 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);
```