javascript - js或者jquery里有类似nodejs里eventEmitter的东西吗?
PHP中文网
PHP中文网 2017-04-11 10:53:01
[JavaScript讨论组]
PHP中文网
PHP中文网

认证0级讲师

全部回复(5)
PHP中文网

你是问事件传播机制,还是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')

PHP中文网
  1. jQuery 的 on、off、trigger 就是你要的

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

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

  4. 自己实现

大家讲道理

EventTarget

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号