Observe pattern
by Anton Kolesnikov
JavaScript
var publisher = {
subscribers : {
any: []
},
subscribe: function(fn, type){
var type = type || 'any';
if( typeof this.subscribers[type] === 'undefined') {
this.subscribers[type] = [];
}
this.subscribers[type].push(fn);
},
unsubscribe: function(fn, type) {
this.visitSubscribers('unsubscribe', fn, type);
},
publish: function(publication, type){
this.visitSubscribers('publish', publication, type);
},
visitSubscribers: function(action, arg, type){
var type = type || 'any',
i,
max = this.subscribers[type].length;
for (i=0; i<max; i++){
if( action === 'publish'){
subscribers[i](arg);
} else {
if( subscribers[i] === arg) subscribers.splice(i,1);
}
}; // for
}
}