<!--
description:JS类中event的简单实现
all rights by Lonsan on 2005
email:Lonsan21@163.com
请各位多批评指导,谢谢
-->
<html>
<head>
<title> JS Event </title>
<style>
</style>
</head>
<body>
</body>
</html>
<script language="javascript">
<!--
//实现,实现类似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;
}
//示例
function Persion(){}
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>
description:JS类中event的简单实现
all rights by Lonsan on 2005
email:Lonsan21@163.com
请各位多批评指导,谢谢
-->
<html>
<head>
<title> JS Event </title>
<style>
</style>
</head>
<body>
</body>
</html>
<script language="javascript">
<!--
//实现,实现类似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;
}
//示例
function Persion(){}
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>