zoukankan      html  css  js  c++  java
  • js 事件调度

     var EventTarget = function () {
            this._listener = {};
        };
        EventTarget.prototype = {
            constructor: this,
            addEvent: function (type, fn) {
                if (typeof type === "string" && typeof fn === "function") {
                    if (typeof this._listener[type] === "undefined") {
                        this._listener[type] = [fn];
                    } else {
                        this._listener[type].push(fn);
                    }
                }
                return this;
            },
            addEvents: function (obj) {
                obj = typeof obj === "object" ? obj : {};
                var type;
                for (type in obj) {
                    if (type && typeof obj[type] === "function") {
                        this.addEvent(type, obj[type]);
                    }
                }
                return this;
            },
            fireEvent: function (type) {
                if (type && this._listener[type]) {
                    //event参数设置
                    var events = {
                        type: type,
                        target: this
                    };
    
                    for (var length = this._listener[type].length, start = 0; start < length; start += 1) {
                        //改变this指向
                        this._listener[type][start].call(this, events);
                    }
                }
                return this;
            },
            fireEvents: function (array) {
                if (array instanceof Array) {
                    for (var i = 0, length = array.length; i < length; i += 1) {
                        this.fireEvent(array[i]);
                    }
                }
                return this;
            },
            removeEvent: function (type, key) {
                var listeners = this._listener[type];
                if (listeners instanceof Array) {
                    if (typeof key === "function") {
                        for (var i = 0, length = listeners.length; i < length; i += 1) {
                            if (listeners[i] === key) {
                                listeners.splice(i, 1);
                                break;
                            }
                        }
                    } else if (key instanceof Array) {
                        for (var lis = 0, lenkey = key.length; lis < lenkey; lis += 1) {
                            this.removeEvent(type, key[lenkey]);
                        }
                    } else {
                        delete this._listener[type];
                    }
                }
                return this;
            },
            removeEvents: function (params) {
                if (params instanceof Array) {
                    for (var i = 0, length = params.length; i < length; i += 1) {
                        this.removeEvent(params[i]);
                    }
                } else if (typeof params === "object") {
                    for (var type in params) {
                        this.removeEvent(type, params[type]);
                    }
                }
                return this;
            }
        };
    
        var myEvents = new EventTarget();
        myEvents.addEvents({
            "once": function () {
                alert("该弹框只会出现一次!");
                this.removeEvent("once");
            },
            "infinity": function () {
                alert("每次点击页面,该弹框都会出现!");
            }
        });
    
        myEvents.fireEvents(["once", "infinity"]);
  • 相关阅读:
    mysql授权GRANT ALL PRIVILEGES
    MySQL修改root密码的多种方法
    javaagent
    JavaAgent 应用(spring-loaded 热部署)
    JavaAgent入门
    java运行jar命令提示没有主清单属性
    连接到 redis 服务
    PHP中的socket TCP编程
    Memcached 与 Redis 区别
    rc.local配置
  • 原文地址:https://www.cnblogs.com/gaocong/p/7844860.html
Copyright © 2011-2022 走看看