<!-- description:JS类中event的简单实现 code by Lonsan on 2005 email:Lonsan21@163.com 请各位多批评指导,谢谢 --> <html> <head> <title> JS Event </title> <style> </style> </head> <body> </body> </html> <!-- //实现,实现类似C#风格调用 function RaiseEvent(sender,event) { event.replace(/^undefined|null|\s+/,""); eval("var f = function(sender){\n"+event+"\n}"); f(sender); } function EventHandler(o) { this.delegate = "\n"; //function if(typeof o=="function") { this.delegate += o.toString().match(/function([^\0\(]*)\(/)[1] + "(sender);\n"; } //function name else if(typeof o=="string" && /^[a-z\$]*[0-9a-z]+$/i.test(o)) { this.delegate += o + "(sender);\n"; } //function code else if(typeof o=="string") { this.delegate += o + ";\n"; } //else else { //do nothing } return this.delegate; } EventHandler.prototype.toString = function() { return this.delegate; } //示例 Persion.prototype.onBeginSpeak; //也可有默认事件,优先进行处理 Persion.prototype.onEndSpeak = new EventHandler(DefaultEvent); Persion.prototype.name="Lonsan"; Persion.prototype.Speak = function(sWords) { RaiseEvent(this, this.onBeginSpeak); alert("正在讲话。。。\n以下是讲话内容:\n"+sWords); RaiseEvent(this, this.onEndSpeak); } var p = new Persion() //事件挂接,可以挂接多个 p.onBeginSpeak += new EventHandler(BeginSpeak1); p.onBeginSpeak += new EventHandler(BeginSpeak2); p.onEndSpeak += new EventHandler("EndSpeak"); p.onEndSpeak += new EventHandler("alert('讲话结束了,大家散场吧。');"); p.Speak("大家好"); function BeginSpeak1(sender) { alert("处理BeginSpeak事件!--1\n讲话者:"+sender.name); } function BeginSpeak2(sender) { alert("处理BeginSpeak事件!--2"); } function EndSpeak(sender) { alert("处理EndSpeak事件!"); } function DefaultEvent(sender) { alert("EndSpeak的默认事件处理。"); } //--> </script> 相关文章: