现在的位置: 首页 > 综合 > 正文

JS类中event的简单实现

2011年08月08日 ⁄ 综合 ⁄ 共 1791字 ⁄ 字号 评论关闭
<!-- 

    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>

抱歉!评论已关闭.