<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>给对象增加一个简单的自定义事件机制</title></head><body><script type="text/javascript">function MyObject()...{// 保存事件监听函数数组this.RunEventListeners = new Array();}MyObject.prototype.Run = function()...{// 在这里实现Run方法的代码并且触发// 下边是激活onrun事件for(var i = 0; i < this.RunEventListeners.length; i++)this.RunEventListeners[i](this);}MyObject.prototype.AddEvent = function(name, listener)...{switch(name.toLowerCase())...{case "onrun":this.RunEventListeners[this.RunEventListeners.length] = listener;break;// 还可以在这里增加各种事件,最好判断一下该listener是事已经被添加,以免重复执行,不过这里省了default:break;}}function OnRun1(sender)...{alert("已经执行了OnRun1事件")}function OnRun2(sender)...{alert("已经执行了OnRun2事件");}var myobj = new MyObject();// 添加两个监听函数myobj.AddEvent("onrun", OnRun1);myobj.AddEvent("onrun", OnRun2);// 执行Run方法,如无例外,会触发onrun事件myobj.Run();</script></body></html> <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>给对象增加一个简单的自定义事件机制</title></head><body><script type="text/javascript">Function.prototype.DECLEAR_EVENT = function(evt_type)...{var args = arguments;var method = this;var type = evt_type;return function()...{method.apply(this, args);for(each in this.EventListeners[type])this.EventListeners[type][each](this);}}function MyObject()...{// 保存事件监听函数数组this.EventListeners = new Array();}MyObject.prototype.Run = function()...{// 在这里实现Run方法的代码}.DECLEAR_EVENT("onrun"); //onrun事件声明MyObject.prototype.AddEvent = function(name, listener)...{this.EventListeners[name]?this.EventListeners[name].push(listener):this.EventListeners[name]=[listener];}function OnRun1(sender)...{alert("已经执行了OnRun1事件")}function OnRun2(sender)...{alert("已经执行了OnRun2事件");}var myobj = new MyObject();// 添加两个监听函数myobj.AddEvent("onrun", OnRun1);myobj.AddEvent("onrun", OnRun2);// 执行Run方法,如无例外,会触发onrun事件myobj.Run();</script></body></html> <SCRIPT LANGUAGE="JavaScript"><!--function EventTarget()...{this._listeners=...{};this.addEventListener=function(sType,fnHandle)...{if ('function'!=typeof fnHandle)...{return;}var ls=this._listeners[sType];if(!ls)ls=this._listeners[sType]=...{};ls[EventTarget.toHashCode(fnHandle)]=fnHandle;};this.dispatchEvent=function(sType)...{if(!this._listeners[sType])return;for(var hc in this._listeners[sType])...{this._listeners[sType][hc].call(this);}};}EventTarget.toHashCode=function(o)...{if(o._hashCode)return o._hashCode;return o._hashCode="_"+(EventTarget._hashCodeCounter++).toString(32);};EventTarget._hashCodeCounter=0;function TestEvent()...{EventTarget.call(this);this.test=function()...{alert('test方法开始执行');this.dispatchEvent('onTest');alert('test方法执行完毕');};};var test=new TestEvent();test.addEventListener('onTest',function()...{alert('监听到test事件');});test.test();var test2=new TestEvent();test2.test();//--></SCRIPT>