VBscript的类是否支持event自定义事件

昨天写类的时候,我定义一个event,然后就报错。
比如这样:Event GetDay()
它就报语法错误
而如果这样:Public Event GetDay()
它就报缺少标识符

那到底VBscript是不是支持event呢,它要是不支持,我也就另寻它法了
---------------------------------------------------------------

VBscript不支持event
必竟VBScript只是脚本,和C++,Java,C#不一样。
不过,可以自己模拟。
看看这文章

JavaScript
http://dev.csdn.net/develop/article/19/19401.shtm

实现了属性和方法,剩下的就是Event的实现了,我查找了许多资料,包括整个MSDN关于JScript的参考,都没有看到一个很好的模型关于事件实现的,后来参考了一些站点编写HTA(HTML Component,有空我会写一些相关的文章)的实现,借助于比较扭曲(我个人认为)的方法可以大致的实现基于事件驱动的功能。大致的思路是这样子的:

1).将所有的事件定义成属性,只要简单的声明就可以

2).在需要触发事件的代码中判断事件属性是否是一个函数,如果是函数,直接执行函数代码,如果是字符串,那么执行字符串函数,通过eval(str)来执行。

  1. .在类的实例当中注册事件函数。

为了简单说明如上的思路,采用timer这样简单的例子来表述如上的所提到的内容,如果只是为了简单的实现timer的功能,Javascript中setInterval函数就可以满足全部的要求,如下的代码只是用来说明Timer的工作原理。

//Class For Timer
function Timer(iInterval){
//if not set the timer interval ,then defalut set to 500ms
this.Interval=iInterval ¦ ¦ 500;
this._handleInterval;
this.TimerEvent=null
function Start(){
if(this.Interval!=0){
this._handleInterval=setInterval("TimerCallBack()",this.Interval);
}
}
function Start(){
clearInterval(this._handleInterval);
}
function TimerCallBack(){
if (typeof this.TimerEvent=="function"){
this.TimerEvent();
}
else if(this.TimerEvent!=null && this.TimerEvent.length>0){
eval(this.TimerEvent);
}
}
}
//Code for Instance
var t=new Timer(3);

//------------------------------------//

//1.
t.TimerEvent=function(){
//todo
}

//2.
t.TimerEvent="alert("hello")";

//3.

t.TimerEvent=tTimerCall;

//----------------------------------//
t.Start();
t.Stop();

function tTimerCall(){

}

实际工作代码是在TimerCallBack()上面实现,事件触发作为属性的方式来实现,在应用实例中,代码提供了三种方法去调用事件,不过在事件的回调当中,我还没有想到如何可以带参数,只有才各自的实现当中访问各自需要的属性才能够实现全部的要求。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus