什么是事件广播(Emitter)

”事件广播“具体该怎么称呼,可能我也说不出个所以然,暂且就叫他事件广播吧。在我看来事件广播也是解决类与类之间依赖耦合的一种方式。

什么是事件广播

其实我也没有事件广播的概念,也没有深入行业圈去弄个所以然。我最初了解事件广播(那时候我还不知道叫这个)是在一次与NodeJS的邂逅,那时候我感觉这个东西很管用的。举个例吧,例如A,B两个对象,A、B不能有耦合,在这种情况下B怎么知道A发生了什么呢。这就需要事件广播了。A在发生事件的时候广播一个事件,B对这个广播进行接受,这样就达到了需求。

Emitter

这个类名字的来源出至NodeJS里面的EventEmitter类,NodeJS的EventEmiiter类可以参见nodejs的源码,本文说说的Emitter实现了如下接口:addListener,on,once,removeListener,trigger。on是addListener的一个简写名。

addListener,on,once 这三个接口通常有事件广播接收责调用,而trigger通常由广播发出者调用。

Bee.Emitter

详细代码见 Bee.Emitter最后部分 ,代码演示如下:

//这里定义类A和类B,类A中有一个方法a,触发一个a事件
//类B想在A触发a的时候调用方法b

function A(){};
A.prototype = {
	a: function(){
		this.trigger('ona',{data:'data'})
	}
};
//这里A类继承Bee.Emitter类
Bee.copy(A,Bee.Emitter);
function B(){};
B.prototype = {
	b: function(data){
		console.log('trigger B.b',data);
	}
};

//下面是调用部分
var aa = new A;//实例化
var bb = new B;
//在aa上注册广播ona的接受接受器为bb.b方法
aa.on('ona',bb.b);
aa.on('onaa',bb.b);
  • 时间: November Nov, 2012
  • 分类:article
  • 标签:学习