Lonsan
博客园
首页
社区
新文章
新随笔
订阅
管理
posts - 4, comments - 17, trackbacks - 0
JS类中event的简单实现
<!--
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(
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:45
蓝山
阅读(1666)
评论(9)
编辑
收藏
FeedBack:
289891
#1楼
2005-04-07 19:14
|
ttyp
不错~,不过文章标题有点误倒
回复
引用
查看
#2楼
2005-04-07 21:52
|
Laser.NET
那如何实现-=的操作呢?
回复
引用
查看
#3楼
2005-04-07 22:22
|
birdshome
mission impossible.
回复
引用
#4楼
2005-04-07 23:59
|
ttyp
这种结构的好象不行
回复
引用
查看
#5楼
2005-04-08 01:07
|
birdshome
其实我也想过模拟+=和-=,除非用int来保存。
做一个表,int有32位,一bit位对应一个事件,就可以用+=和-=操作了,不过想起来都恐怖,我也就根本没有去试验:P
在我的TreeView控件中,也实现了一种事件模型,类似dom提供的attachEvent,明天要是有空就post出来。
回复
引用
查看
#6楼
2005-04-08 08:43
|
Lonsan
:)
这只是偶然想到要这么来做的,昨天有点时间就实现了,只是一点个人想法。平时也很喜欢研究js,取个乐,呵呵
-=好象不好实现,或者说暂时没想到:(
回复
引用
#7楼
2005-04-08 08:48
|
Lonsan
fro birdshome:你的想法好象是可行的,可以考虑一下。
回复
引用
#8楼
2005-04-08 10:43
|
Lonsan
已修改可以支持-=和+=操作,代码下午可以发上来,请大家多提意见,感谢各位朋友指点。
回复
引用
#9楼
2005-12-03 12:17
|
haigear[未注册用户]
不错的想法
回复
引用
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
谷歌将出售Clearwire股份 不到收购价1/10
·
为什么Google比苹果更令微软恐惧?
·
思科拟2.71亿美元收购私有公司Lightwire
·
社交商务公司Bazaarvoice将于2月24日进行IPO
·
戴尔收购备份软件公司AppAssure
»
更多新闻...
最新知识库文章
:
·
领域模型管理与AOP
·
编程的艺术:漂亮的代码和漂亮的软件
·
GIT分支管理是一门艺术
·
编程:是一门艺术
·
编程是一门艺术吗?
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
昵称:
蓝山
园龄:
7年7个月
粉丝:
0
关注:
0
<
2012年2月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
随笔档案
2005年4月 (3)
2004年7月 (1)
最新评论