Skip to content

Instantly share code, notes, and snippets.

@slmyers
Created January 3, 2016 23:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slmyers/d9b3dbeac2e51383c817 to your computer and use it in GitHub Desktop.
Save slmyers/d9b3dbeac2e51383c817 to your computer and use it in GitHub Desktop.
Use case for es2015 weark map. A dictionary for listeners. A map would leak whereas this will not.
var listenableMap = new WeakMap();
export function getListenable (object) {
if (!listenableMap.has(object)) {
listenableMap.set(object, {});
}
return listenableMap.get(object);
}
export function getListeners (object, identifier) {
var listenable = getListenable(object);
listenable[identifier] = listenable[identifier] || [];
return listenable[identifier];
}
export function on (object, identifier, listener) {
var listeners = getListeners(object, identifier);
listeners.push(listener);
}
export function removeListener (object, identifier, listener) {
var listeners = getListeners(object, identifier);
var index = listeners.indexOf(listener);
if(index !== -1) {
listeners.splice(index, 1);
}
}
export function emit (object, identifier, ...args) {
var listeners = getListeners(object, identifier);
for (var listener of listeners) {
listener.apply(object, args);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment