订阅——发布者模式简单实现

//定义发布订阅Even类
class Even{
    constructor(){
        this._events = {};  //事件对象,存放添加的一个个事件,每个事件为一个数组,数组里存放该事件应该触发的函数
    }

    $on(even,fn){
       if(this._events[even]){ //如果事件存在,将fn添进事件数组里
           this._events[even].push(fn);
       }else{    //如果该事件不存在,将该事件放进事件对象,并把要绑定的事件函数添加进此事件数组里
           this._events[even] = [];
           this._events[even].push(fn);
       }
    }

    $emit(even){ //事件触发函数
       if(this._events[even]){ //遍历每个事件数组,执行每个函数
           this._events[even].forEach(fn => void fn());
       }
    }
}

//使用

let today = new Even(); //定义today这个事件对象
//发布
today.$on("goToSchool",carryYourBag);//添加事件和相应函数
today.$on("goToSchool",rideBicycle);
today.$on("goToSchool",sayHiToTeacher);

//订阅
today.$emit("goToSchool");

//下面为定义事件函数
function carryYourBag(){
    console.log("我背起了书包!");
}

function rideBicycle(){
    console.log("我骑上了自行车!");
}

function sayHiToTeacher(){
    console.log("我到达了学校,并给老师打了招呼!");
}

输出:

我背起了书包!
我骑上了自行车!
我到达了学校,并给老师打了招呼!
[Done] exited with code=0 in 0.169 seconds

你可能感兴趣的:(JavaScript,JavaScript,设计模式)