function EventTarget(){
//存储事件处理程序
this.handlers = {};
}
EventTarget.prototype = {
constructor: EventTarget,
//注册给定类型事件的事件处理程序
addHandler: function(type, handler){
//针对某个事件类型创建数组
if(typeof this.handlers[type] == "undefined"){
this.handlers[type] = [];
}
this.handlers[type].push(handler);
},
fire: function(event){
if(!event.target){
event.target = this;
}
if(this.handlers[event.type] instanceof Array){
var handlers = this.handlers[event.type];
//查找对应事件类型的一组处理程序
for(var i=0, len=handlers.length;i<len;i++){
//触发事件
handlers[i](event);
}
}
},
removeHandler: function(type, handler){
if(this.handlers[type] instanceof Array){
var handlers = this.handlers[type];
for(var i=0,len=handlers.length;i<len;i++){
if(handlers[i] === handler){
break;
}
}
//移除事件
handlers.splice(i, 1);
}
}
};
function handleMessage(event){
console.log("消息接收: " + event.message);
}
//创建一个新对象
var target = new EventTarget();
//添加一个事件处理程序
target.addHandler("message", handleMessage);
//触发事件
target.fire({type: "message", message:"Hello world"});
//删除事件处理程序
target.removeHandler("message", handleMessage);
//再次触发,没有处理程序
target.fire({type: "message", message:"Hello world"});
console