作者:漫猪傻滑_679 | 来源:互联网 | 2023-01-24 09:36
javascript版的:functiondelegate(){this.eventnewArray();}delegate.prototype.addfunction(fun,obj){
Javascript版的:
function delegate()
{
this.event=new Array();
}
delegate.prototype.add=function(fun,obj)
{
this.event[this.event.length]=function(){
fun.apply(obj);
};
}
delegate.prototype.exec=function()
{
for(var i=0;i {
this.event[i]();
}
}
delegate.prototype.del =function (num)
{
if (num {
this.event.splice(num, 1);
}
}
Vbscript版的:
class delegate
dim arr()
dim arrTrue
Private Sub Class_Initialize
arrTrue=false
End Sub
function add(funname,obj)
if arrTrue=true then
redim Preserve arr(ubound(arr)+1,1)
else
arrTrue=true
redim Preserve arr(0,1)
end if
set arr(ubound(arr),0)=obj
arr(ubound(arr),1)=funname
End function
Sub exec
for i=0 to ubound(arr)
execute "arr(" & i & ",0)." & arr(i,1)
next
End Sub
end class
Javascript版的可能比较好理解,而vbs需要用到反射机制才能模拟出委托来
execute "arr(" & i & ",0)." & arr(i,1)关键是这一句,才能很好的完成js中的闭包