5 个回答

你是问事件传播机制,还是EventEmitter这个工具本身?

如果是问工具,那还真有一个(但不是jquery提供的),看EventEmitter

如果是问事件传播机制,那这也算啊:

//创建一个window对象上的事件监听,监听hello事件
window.addEventListener('hello', function(e){
    console.log(e);
}, false);

//创建一个Event实例,事件名:hello
var e  = new Event('hello');
//在window对象上触发这个事件
window.dispatchEvent(e);

自己实现一个也没有多难吧……

    function EventDispatcher() {
        this.listeners = {};
    }

    EventDispatcher.prototype = {
        on: function(type, listener) {
            if (!this.listeners[type]) {
                this.listeners[type] = [];
            }
            this.listeners[type].push(listener);
        },
        emit: function(type) {
            var listeners = this.listeners[type];
            var args = Array.prototype.slice.call(arguments);
            args.shift();
            if (typeof window.console !== "undefined") {
                window.console.info("on\t" + type + "\t" + args.join(" , "));
            }
            if (listeners) {
                for (var i = 0, len = listeners.length; i < len; i++) {
                    listeners[i].apply(this, args);
                }
            }
        },
        off: function(type) {
            delete this.listeners[type];
        }
    };

然后browserify里你可以直接var EventDispatcher = require("events");,它能提供一个功能差不多的用于前端编译。源码见此

新手上路,请多包涵

jQuery有啊 $.event.trigger('eventname')

  1. jQuery 的 on、off、trigger 就是你要的

  2. 也有一些已经实现好的 EventEmitter

  3. 如果你用了 webpack ,还可以直接使用 nodejs 的 event

  4. 自己实现

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题