#### 面向过程与面向对象
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计算器
![](https://box.kancloud.cn/748c287769d619060d467a000b2c3b2a_679x914.png)