简单的发布-订阅模型

2019-08-01  本文已影响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('生存', '我', '他');
上一篇下一篇

猜你喜欢

热点阅读