简单的发布-订阅模型
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('生存', '我', '他');