mirror of
https://github.com/alrayyes/wiki.git
synced 2024-11-29 14:36:22 +00:00
46 lines
1,021 B
Markdown
46 lines
1,021 B
Markdown
---
|
||
date: 20201012
|
||
id: e06279b3-4488-40b1-b822-fca19b47089a
|
||
title: JavaScript WeakMaps
|
||
---
|
||
|
||
# Introduction
|
||
|
||
A WeakMap is a [Map](20201012093745-javascript_maps) that doesn’t
|
||
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);
|
||
```
|