返回

发布订阅模式

var EventEmiter = (function() {
    var _events = {};
    return {
        on: function(eventName, fn) {
        if (!eventName in this._events) {
            this._events[eventName] = [];
        }
        this._events[eventName].push(fn);
        },
        emit: function(eventName) {
        var _args = Array.prototype.slice.call(arguments, 1),
            _events = this._events;
        if (eventName in _events) {
            _events[eventName].forEach(fn => {
            fn.apply(_args);
            });
        }
        },
        off: function(eventName, fn) {
            var _events = this._events,
            index;
            
        if (eventName in _events) {
            if (fn) {
                if(typeof fn === 'function') {
                index = _events.indexOf(fn);
                index>-1 && this._events[eventName].splice(index,1)
                }
            }else {
            this._events[eventName] = [];
            }
        }
        }
    };
})();