<!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>