1. 程式人生 > >TS中...args的使用例子

TS中...args的使用例子

delete 執行 sin obj del 事件類型 list != llb

/**
 * 事件管理類
 * 一個全局的Event類
 * 對比egret.Event,該事件類可傳遞..args多個參數。在回調函數上callBack(a,b,c)形式接收。
 * 而egret.Event回調只能以 callBack(data)方式接收,當需要傳遞多個參數時,每次發送和接收都需要封裝一次data。
 * @author chenkai
 * @date 2016/8/30
 */
class EventMananger extends SingleClass{
    /**事件列表*/
    private eventList = {};

    /**
     * 發送事件
     * @type 事件類型
     * @args 攜帶數據
     
*/ public sendEvent(type:string,...args:any[]){ var arr:Array<any> = this.eventList[type]; if(arr != null){ var len = arr.length; var listen:Function; var thisObject:any; for(var i=0;i<len;i++){ var msg = arr[i]; listen
= msg[0]; thisObject = msg[1]; listen.apply(thisObject, args); } } } /** * 監聽事件 * @type 事件類型 * @listener 回調函數 * @thisObject 回調執行對象 */ public addEvent(type:string, listener:Function, thisObject:any){ var arr:Array<any> = this
.eventList[type]; if(arr == null){ arr = []; this.eventList[type] = arr; }else{ var len = arr.length; for(var i=0;i<len;i++){ if(arr[i][0] == listener && arr[i][1] == thisObject){ return; } } } arr.push([listener, thisObject]); } /** * 移除事件 * @type 事件類型 * @listener 回調函數 * @thisObject 回調執行對象 */ public removeEvent(type:string ,listener, thisObject:any){ var arr:Array<any> = this.eventList[type]; if(arr != null){ var len = arr.length; for(var i = len-1; i>=0;i--){ if(arr[i][0] == listener && arr[i][1] == thisObject){ arr.splice(i,1); } } } if(arr && arr.length == 0){ this.eventList[type] = null; delete this.eventList[type]; } } }

TS中...args的使用例子