1 //自定义事件 2 function EventTarget() { 3 this.handlers = {}; 4 } 5 EventTarget.prototype = { 6 constructor: EventTarget, 7 //注册 8 addHandler: function(type, handler) { 9 if (typeof this.handlers[type] == "undefined") { 10 this.handlers[type] = []; 11 } 12 this.handlers[type].push(handler); 13 }, 14 //触发 15 fire: function(event) { 16 if (!event.target) { 17 event.target = this; 18 } 19 if (this.handlers[event.type] instanceof Array) { 20 var handlers = this.handlers[event.type]; 21 for (var i = 0, len = handlers.length; i < len; i++) { 22 handlers[i](event); 23 } 24 } 25 }, 26 //注销 27 removeHandler: function(type, handler) { 28 if (this.handlers[type] instanceof Array) { 29 var handlers = this.handlers[type]; 30 for (var i = 0, len = handlers.length; i < len; i++) { 31 if (handlers[i] === handler) { 32 break; 33 } 34 } 35 handlers.splice(i, 1); 36 } 37 } 38 };
1 //使用方法 2 function handleMessage(event) { 3 alert("Message received: " + event.message); 4 } 5 //创建一个新对象 6 var target = new EventTarget(); 7 //添加一个事件处理程序 8 target.addHandler("message", handleMessage); 9 //触发事件 10 target.fire({ 11 type: "message", 12 message: "Hello world!" 13 }); 14 //删除事件处理程序 15 target.removeHandler("message", handleMessage); 16 //再次,应没有处理程序 17 target.fire({ 18 type: "message", 19 message: "Hello world!" 20 });