『javascriptパターン』という書籍にobserverパターンが載っていたけど、書籍の例ではイベント発行する側とサブスクライバの結合度が高かった。
なので結合度なしで実装してみた。(どのイベントを購読するかは指定する必要ある)
ソースコードはこちら。
https://github.com/0xfffffff7/ObserverJS
やることは二つだけで、
Observable.toObservable(対象の何か) // observerに昇格させる。
対象の何か.subscribe(func(), "受け取りたいイベント名") //コールバックを指定する。
イメージ
サンプル
<script type="text/javascript" src="Observer.js"></script>
// とあるオブジェクト.
var SomeObject = {
SomeObjectEventFunc: function(arg1, arg2){};
};
// イベントを受け取りたい人.
var YourReceiver = {
CallbackFunc: function(){
console.log(arguments);
}
};
// とあるオブジェクトをオブザーバーへ昇格させる.
Observable.toObservable(SomeObject);
// イベントを購読する.
SomeObject.subscribe(YourReceiver.CallbackFunc, 'SomeObjectEventFunc');
// イベント発火.
SomeObject.SomeObjectEventFunc(arg1, arg2);
コールバックメソッドの引数にはイベントメソッド名、その引数、結果が渡される。
console output -> ["SomeObjectEventFunc", Arguments[2], "RESULT_OBJECT"]