<!-- 
    description:JS类中event的简单实现
    code 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(
thisthis.onBeginSpeak);

    alert(
"正在讲话。。。\n以下是讲话内容:\n"+sWords);

    RaiseEvent(
thisthis.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>
posted on 2005-04-07 17:45  蓝山  阅读(2078)  评论(9编辑  收藏  举报