ts 事件派发

class EventDispatcher
{
    /**事件列表*/
    private static eventList = {};

    constructor()
    {
       
    }

    /** 
     * 派发事件
     * @param type 事件类型
     * @param args 事件参数
     */
    public static dispatchEvent(type:string, ...args:any[]):void
    {
        let arr:Array<any> = this.eventList[type];
        if(arr)
        {
            arr.forEach(element => 
            {
                element[0].apply(element[1], args);
                // listener.call(thisObject, args);
            });
        }
    }

    /**
     * 监听事件
     * @param type       事件类型
     * @param listener   回调函数
     * @param thisObject 回调执行对象
     */
    public static addEventListener(type:string, listener:Function, thisObject:any):void
    {
        let arr:Array<any> = this.eventList[type];
        if(!arr)
        {
            arr = [];
            this.eventList[type] = arr;
        }
        else
        {
            arr.forEach(element => 
            {
                if(element[0] == listener && element[1] == thisObject)
                {
                    return;
                }
            });
        }
        arr.push([listener, thisObject]);
    }

    /**
     * 移除事件
     * @param type       事件类型
     * @param listener   回调函数
     * @param thisObject 回调执行对象
     */
    public static removeEventListener(type:string, listener:Function, thisObject:any):void
    {
        var arr:Array<any> = this.eventList[type];
        if(arr)
        {
            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];
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/chinayfhuang/p/9767899.html
ts