もうあるので車輪の再発明だけど、作った
https://github.com/shokai/event_emitter.js


元々sinatra-cometioの中で使っていたのを切り出して、テストとか書いた。

Ruby版といっしょに使うと楽しい。

event emitterとは


Node.jsに含まれているライブラリ。をWebブラウザだけで動くように実装しなおした。


こんな感じでapplyすると
var User = function(){
new EventEmitter().apply(this);
this.name = '';
};

イベント登録して
var user = new User();
user.name = 'shokai';
user.on('go', function(data.place){
alert(user.name+' -> '+data.place);
});

呼び出せるようになる
user.emit('go', {place: 'mountain'}); // "shokai -> mountain"

あと、onのかわりにonceで登録すると1回だけ呼び出せるイベントになったりとかある。
JavaScriptの全てオブジェクトに簡単にイベント機能が追加できる。
くわしくはREADMEを見て。


test


ブラウザで使うjsだけどterminalでテストしたかったので、nodeunitを使った。


このようにnode実行した時はnode moduleとして読み込めるように、event_emitter.jsの末尾でmodule.exportsに登録しておいた。
var EventEmitter = function(){
/** 略 **/
};

if(typeof module !== 'undefined' && typeof module.exports !== 'undefined'){
module.exports = EventEmitter;
}

あとはnodeunitでテストを書いた。


JavaScriptの圧縮


uglify-jsで圧縮した