Registry Pattern (Event System)

JS
S
JavaScript

Simple registry pattern to implement an event system. Snippet by Derick Bailey. https://derickbailey.com/

1function Registry(defaultValue){
2  this._defaultValue = defaultValue;
3  this._values = Object.create(null);
4};
5
6Registry.prototype.register = function(name, value){
7  this._values[name] = value;
8};
9
10Registry.prototype.getValue = function(name){
11  var value;
12  if (Object.prototype.hasOwnProperty.call(this._values, name)){
13    value = this._values[name];
14  } else {
15    value = this._defaultValue;
16  }
17  return value;
18};
19
20function Events(){
21  this._registry = new Registry();
22}
23
24Events.prototype.on = function(eventName, callback){
25  var handlers = this._registry.getValue(eventName);
26  if (!handlers) { 
27    handlers = [];
28    this._registry.register(eventName, handlers);
29  }
30  handlers.push(callback);
31};
32
33Events.prototype.trigger = function(eventName, data){
34  var handlers = this._registry.getValue(eventName);
35  if (handlers){
36    var length = handlers.length;
37    var fn;
38    for(var i = 0; i < handlers.length; i++){
39      fn = handlers[i];
40      fn(data);
41    }
42  }
43};
44
45var events = new Events();
46
47events.on("some:event", function(data){
48  console.log("i'm an event handler!");
49  console.log("Data was passed to me", data);
50});
51
52events.trigger("some:event", "some data");

Created on 12/5/2017