美文网首页
简单的发布-订阅模型

简单的发布-订阅模型

作者: 没了提心吊胆的稗子 | 来源:发表于2019-08-01 13:56 被阅读0次
    // 发布 emit 订阅 on
    function Person() {
        this._events = {};
        // _events = {'生存': ['吃', '工作', '喝']}  每来一个事件就添加到数组里面去
    }
    // 订阅 要放在原型上,这样每个person实例都可以用
    Person.prototype.on = function(eventName, callback){
        if(this._events[eventName]){ // 不是第一次
            this._events[eventName].push(callback)
        }else{
            this._events[eventName] = [callback];
        }
    };
    // 发布  也是放在原型上
    Person.prototype.emit = function(eventName, ...args){
        if(this._events[eventName]){
            this._events[eventName].forEach(cb => cb(...args));
        }
    };
    let p = new Person();
    let eat = (who) => {
        console.log(who + '吃');
    };
    let work = (who) => {
        console.log(who + '工作');
    };
    let drink = (who) => {
        console.log(who + '喝');
    };
    // 给'生存'这个事件订阅三个方法
    p.on('生存', eat);  // {生存: [eat]}
    p.on('生存', work); // {生存: [eat, work]}
    p.on('生存', drink); // {生存: [eat, work, drink]}
    // 订阅之后发布
    p.emit('生存', '我', '他');
    

    相关文章

      网友评论

          本文标题:简单的发布-订阅模型

          本文链接:https://www.haomeiwen.com/subject/xxmqdctx.html