PubSub muito pequeno usando métodos de navegador nativos

enquanto estava hackeando minhas ferramentas de desenvolvedor, queria saber se poderia escrever uma implementação PubSub utilizando o sistema de eventos nativo do navegador em vez de escrever meu próprio.

/*! tiny Js Pub/Sub
* http://anasnakawa.com/

* Copyright (c) Anas Nakawa

* inspired by Ben Alman's tiny one <https://gist.github.com/cowboy/661855>

* MIT License

*/


(function( p ) {

var e = p.e = {};

p
.publish = function( name, data ) {
( e[ name ] = e[ name ] || new Event( name ) ).data = data;
dispatchEvent
( e[ name ] );
};

p
.subscribe = function( name, handler, context ) {
addEventListener
( name, handler.bind( context ) );
};

p
.unsubscribe = function( name, handler, context ) {
removeEventListener
( name, handler.bind( context ) );
};

})( this.pubsub = {} );

Uso

// main usage
pubsub
.subscribe( 'foo', function( e ) {
e
.data;
});

pubsub
.publish( 'foo', { some: 'data' });

// unsubscribing
var handler = function( e ) {
e
.data;
}

pubsub
.subscribe( 'bar', handler );
pubsub
.unsubscribe( 'bar', handler );
  • funciona apenas em ambientes de navegador (IE9 +, Chrome, FF, ..etc)
  • não compatível com ambiente Node Js
  • você sempre pode consultar a essência atualizada aqui