購読——発表者モードが簡単に実現されます.


//      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("      ,        !");
}
出力:
カバンを背負いました.自転車に乗りました.学校に着きました.先生に挨拶しました.[Dune]exited with code=0 in 0.69 seconds