<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script> /* 有一个第三方观察者,我让第三方观察者订阅一些消息, 每个消息都有一个或者多个方法, 当该消息发生时,执行该消息中的方法 */ //创建一个第三方观察者构造函数 class Observer {
      constructor () {
      this.message = {
     } } //向消息队列里添加内容 on(type,fn) {
      //如果消息没有注册过 if(!this.message[type]){
      this.message[type] = []; } this.message[type].push(fn); } //删除消息队列里的内容 off(type,fn) {
      if(!fn) {
      delete this.message[type]; return; } if(!this.message[type]) return; this.message[type] = this.message[type].filter(item => item !== fn); } //触发消息队列 trigger(type) {
      if(!this.message[type]) return; this.message[type].forEach(item => {
      item(); }) } } const person1 = new Observer(); person1.on("情人节",A); person1.on("情人节",B); person1.on("端午节",C); person1.on("端午节",D); function A() {
     console.log("买玫瑰花");} function B() {
     console.log("买口红");} function C() {
     console.log("吃粽子");} function D() {
     console.log("赛龙舟");} </script>
</body>
</html>
console.log(person1);

person1.trigger("情人节");

person1.trigger("端午节");