博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js的发布/订阅模式
阅读量:6676 次
发布时间:2019-06-25

本文共 1297 字,大约阅读时间需要 4 分钟。

hot3.png

"use strict";

var coreEvent = /** */ (function () {
    function coreEvent() {
        this.handlers = {};
    }
    // 订阅/注册事件 
    coreEvent.prototype.on = function (eventType, handler) {
        // 添加事件
        if (!(handler in this.handlers)) {
            this.handlers[eventType] = [];
        }
        this.handlers[eventType].push(handler);
        return this;
    };
    // 发布事件
    coreEvent.prototype.emit = function (eventType) {
        var handlerArgs = Array.prototype.slice.call(arguments, 1);
        if (this.handlers[eventType]) {
            for (var i = this.handlers[eventType].length - 1; i >= 0; i--) {
                this.handlers[eventType][i].apply(this, handlerArgs);
            }
        }
        return this;
    };
    // 删除事件
    coreEvent.prototype.remove = function (eventType) {
        var currentHandler = this.handlers[eventType];
        if (currentHandler) {
            var len = currentHandler.length;
            currentHandler.splice(0, len);
        }
        return this;
    };
    return coreEvent;
}());

var event = new coreEvent();
测试用例

let i = 0;

    setInterval(() => {
        var str = '价格是' + i++
        var str1 = '价格是' + i++
            event.emit('price', str)
            event.emit('price1', str1)
    }, 1000)
    event.on('price', function(data) {
        console.log('订阅事件price', data)
    })
    event.on('price', function(data) {
        console.log('订阅事件price', data)
    })
    event.on('price1', function(data) {
        console.log('订阅事件price1', data)
    })
    setTimeout(()=>{
        event.remove('price')
    },3000)

转载于:https://my.oschina.net/u/2879089/blog/1928916

你可能感兴趣的文章
英国脱欧对中国光伏产业的短期及长期影响
查看>>
Consensus Attention-based Neural Networks for Chinese Reading
查看>>
英国NPCC称网络摄像头勒索案件数量急剧增加 四起自杀事件与此有关
查看>>
TCTF:鹅厂的“黑客游戏”上线
查看>>
Kief Morris:实现基础设施即代码
查看>>
《Drupal实战》——2.3 为图书添加对应的字段
查看>>
《Android和PHP开发最佳实践》一1.4 小结
查看>>
光伏发电与“鸭子曲线”
查看>>
博鳌直击 | 业界大佬激辩金融科技:互联网金融并不是翻牌就可以叫Fintech
查看>>
Amdocs将成为AT&T ECOMP平台的集成商
查看>>
网络安全问题不断增多 全民安全意识如何提升
查看>>
Linux基金会宣布微内核项目Zephyr
查看>>
企业级市场移动办公率先热战
查看>>
打开电邮附件要小心:新JavaScript勒索工具加密文件无解
查看>>
当经济预测遇到大数据,会产生什么样的火花?
查看>>
行业渠道再洗牌,运营商或重掌行业话语权
查看>>
英特尔驱动边缘计算产业联盟国际化 拓展计算边界
查看>>
网络电话为什么一直是“邻家的电话”?
查看>>
评估公共云存储提供商的四个标准
查看>>
由世纪互联运营的 Power BI 受用户喜爱的六大理由
查看>>