🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 面向过程与面向对象 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)