vbscript以及javascript的事件委託方案

來源:互聯網
上載者:User

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.length;i++)
 {
  this.event[i]();
 }
}

delegate.prototype.del =function (num)
{
  if (num < this.event.length)
  {
   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中的閉包

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.