前言
我是歌謠 我有個兄弟 巅峰的時候排名c站總榜19 叫前端小歌謠 曾經我花了三年的時間創作了他 現在我要用五年的時間超越他 今天又是接近兄弟的一天人生難免坎坷 大不了從頭再來 歌謠的意志是永恒的 放棄很容易 但是堅持一定很酷 本題目源自于牛客網 微信公衆号前端小歌謠
題目
請補全JavaScript代碼,完成"Observer"、"Observerd"類實作觀察者模式。要求如下:
1. 被觀察者構造函數需要包含"name"屬性和"state"屬性且"state"初始值為"走路"
2. 被觀察者建立"setObserver"函數用于儲存觀察者們
3. 被觀察者建立"setState"函數用于設定該觀察者"state"并且通知所有觀察者
4. 觀察者建立"update"函數用于被觀察者進行消息通知,該函數需要列印(console.log)資料,資料格式為:小明正在走路。其中"小明"為被觀察者的"name"屬性,"走路"為被觀察者的"state"屬性
注意:
1. "Observer"為觀察者,"Observerd"為被觀察者

編輯
核心代碼
<!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>觀察者模式</title>
</head>
<body>
<!--
被觀察者構造函數聲明三個屬性分别為"name"用于儲存被觀察者姓名、"state"用于儲存被觀察者狀态、"observers"用于儲存觀察者們
被觀察者建立"setObserver"函數,該函數通過數組的push函數将觀察者參數傳入"observers"數組中
被觀察者建立"setState"函數,該函數首先通過參數修改被觀察者的"state"屬性,然後通過周遊"observers"數組分别調用各個觀察者的"update"函數并且将該被觀察者作為參數傳入
觀察者建立"update"函數,用于列印資訊
-->
<script type="text/javascript">
// 補全代碼
class Observerd {
constructor(name) {
this.name = name
this.state = '走路'
this.observers = []
}
setObserver(observer) {
this.observers.push(observer)
}
setState(state) {
this.state = state
this.observers.forEach(observer => observer.update(this))
}
}
class Observer {
constructor() {
}
update(observerd) {
console.log(observerd.name + '正在' + observerd.state)
}
}
</script>
</body>
</html>