<!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> //监控一个对象的状态,当该对象状态发生改变后立刻做出相应对策 /* 1.创建被观察者 属性,自己的状态 队列,记录谁在观察自己 方法,能设置自己的状态,添加观察者,删除观察者 2.创建观察者 需要一个身份 需要一个方法 */ /* ******************************************************************* */ //观察者构造函数 class Observer {
      constructor (name,fn = () => {
     }) {
      this.name = name; this.fn = fn; } } //创建两个观察者 const bzr = new Observer("班主任",() => {
     console.log("把你家长找来")}); const xz = new Observer("校长",() => {
     console.log("你被开除了")}); /* ******************************************************************* */ /* ******************************************************************* */ //被观察者的构造函数 class Subject {
      constructor (state) {
      this.state = state; this.observers = []; } //设置自己的状态 setState (val) {
      this.state = val; if(this.state === "抄作业") {
      this.observers[0].fn(); }else{
      this.observers[1].fn(); } } //添加观察者 addObervers (obs) {
      //先判断是否已经有该观察者 this.observers = this.observers.filter(item => item !== obs); this.observers.push(obs); } //删除观察者 removeObervers (obs) {
      this.observers = this.observers.filter(item => item !== obs); } } const tyh = new Subject(); tyh.addObervers(bzr); tyh.addObervers(xz); /* ******************************************************************* */ </script>
</body>
</html>