会员
众包
新闻
博问
闪存
赞助商
HarmonyOS
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
Lonsan
博客园
首页
博问
闪存
新随笔
订阅
管理
JS类中event的简单实现
<!--
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
>
posted on
2005-04-07 17:34
蓝山
阅读(
363
) 评论(
0
)
收藏
举报
刷新页面
返回顶部