SOURCE

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 命令行工具 X clear

                    
>
console