#### 面向過程與面向對象
1. 都是解決問題的思路(思想)
#### 面向過程
1. 在解決問題的時候,關注的是解決問題需要的一個接著一個的過程
#### 面向對象
1. 在解決問題的時候,關注的是解決問題所需要的對象
2. 面向對象本身是對面向過程的封裝
3. 面向對象最重要的是什么?找到對象,~~確定對象屬性和行為~~
4. 面向對象的好處:
1. 更方便
2. 復用性更好
3. 高內聚和低耦合
4. 冗余 -> 封裝(提取相同的部分作為函數體,抽取不同的部分作為參數)
#### new 關鍵字做了什么,分別有哪些注意點
1. new 在構造函數內首先創建了一個空對象
1. var this = new Object()
2. this.name = name; this.sex = sex ...
3. 構造函數內返回 return this
2. 如果構造函數內主動返回,有兩種情況
1. 返回對象,則實例為返回的新對象 return [1,2,3] || {} || function(){}
2. 返回基本數據類型,則不受影響,還是返回原始對象
#### 創建對象的幾種方式
1. var obj = {}
2. var obj = new Object()
3. 構造函數創建對象
4. 構造函數原型創建對象,將對象內的方法加入到對象原型中,節約內存(終極版)
```
function Person(options) {
this._init(options)
}
Person.prototype = {
_init(option) {
this.name = option.name
this.sex = option.name
},
skill(technique) {
this.name + ' skill is technique'
}
}
```
#### 面向對象的三大特性
1. 封裝
1. var name = 'jack'; var age = 25
2. var name = 'marion'; var age = 25
3. var person1 = { name: "jack", age: 25 }, person2 = { name: "marion", age: 25 }
2. 繼承
1. var person1 = { name: "jack", age: 25 }
2. for ( var key in person1 ) { newobj[key] = person1[key] }
3. 多態
1. 同一操作,會產生不同的解釋和行為
2. 比如對象調用 toString 方法
3. { name: "jack" }.toString() => [ object Obejct ]
4. [ 1,2,3 ].toString() => ' 1,2,3 '
5. 在強類型語言中,整數和浮點數是不同相加的,在JS中卻可以,這也是一種隱式轉換的多態性
#### 面向對象封裝calcuator計算器
