### 語言知識
1. 編輯語言總體分為兩大類:靜態語言 動態語言
靜態語言優點:在編譯時就能發現類型不匹配的錯誤,明確了數據類型,編譯器還能進一步優化
靜態語言缺點:代碼冗長
動態語言優點:代碼簡潔,編寫更快
動態語言缺點:增加類型不確定的風險
2. 鴨子類型:即只關注對象是否擁有某個方法,而不去關注是哪個對象,不管是雞還是鴨,只要都會同一項技術就可以
### 多態思想
1. 把“做什么 和 誰去做”分離開來
2. 導演案例:導演喊"action",如果是面向過程寫法,需要向不同的角色都說一句,如果是面向對象過程,
提前封裝好方法,導演呼叫開始,叫一次就可以了,各個角色開始做自己的事情
```
function renderMap( map ) {
if (map.show instanceof Function) {
map.show()
}
}
function google() {}
function baidu() {}
let obj = {
show() {
console.log('google')
}
}
let obj2 = {
show() {
console.log('baidu')
}
}
Object.setPrototypeOf(google, obj)
Object.setPrototypeOf(baidu, obj2)
renderMap( google )
renderMap( baidu )
```
### 封裝
1. 封裝思想:封裝的目的是為了隱藏信息
2. 一般封裝是:封裝數據、封裝實現這兩種
### 封裝數據
1. 通過閉包實現私有變量,本質是通過作用域的特性去封裝
### 1. 單例模式
1. 保證一個類只有一個實例,并提供一個訪問它的全局訪問點
### 2. 發布訂閱與觀察者模式:也稱為觀察者模式
1. 它定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變,所有依賴它的對象都將得到通知
2. 在JS中,事件模型也是一種替代傳統的發布訂閱者模式
### 3. 適配器模式
1. 適配器模式主要的作用是解決兩個軟件之間的不兼容問題
2. 現實生活中的適配器:充電器轉換頭、USB轉換頭等
2.