Registry Pattern (Event System)
JS
S
JavaScriptSimple 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