// 公布订阅模式 ==> 一对多的关系;  实质是回调;  参考内置dom2事件// DOM.addEventListener('click', function () { })// DOM.addEventListener('click', function () { })class Event {  // 订阅 || 监听  listen(event, cb) {    if (!this.obj[event]) {      this.obj[event] = [];    }    this.obj[event].push(cb)  }  // 触发函数  trigger(key, ...agrs) {    this.obj[key].forEach(fn => {      fn.apply(this, agrs);    })  }}class SalesOffice extends Event {  obj = {};  constructor() {    super();  }}const salesOffice = new SalesOffice()// 绑定事件salesOffice.listen('click', function (a, b) {  console.log('click', a, b, this === salesOffice);})salesOffice.listen('click', (a, b) => {  console.log('click', a, b);})salesOffice.listen('move', (a, b) => {  console.log('move', a, b);})// 触发事件const remind = event => {  salesOffice.trigger(event, 'aa', 'bb');};remind('click')remind('move')