概述
面向对象是一种编程思维(opo),它主要的核心就是抽取对应的对象(封装, )(万物皆是对象),调用对象的方法。里面的主要的思维就是找有对应方法的对象做对应的事情(调用对应的方法)。
面向过程与面向对象
面向过程(关注与过程) 去餐馆吃饭
- 1,出门
- 2.去餐馆的路上
- 3.进门点餐
- 4.厨师做菜
- 5.服务员上菜
- 6.吃饭
- 7.买单
面对对象(关注于对象)
去餐馆吃饭
- 找餐馆这个对象
对象的创建
使用new 关键词
直接调用对应的构造函数 (es3)
调用class的constructor (es6)
class和构造函数的区别
- class采用了严格模式 不能重复声明一个名字,会直接报错,而构造函数没有采用严格模式可以重复声明 只会覆盖
- class 不会进行预编译 而构造函数会进行预编译
- 构造函数可以不使用new 关键词调用,而class必须使用new 关键词调用 (不使用new关键词会报错)
- class 里面的函数 默认可枚举属性
- class 可以使用extends 来实现继承 它可以继承静态属性
new 关键词做了什么
- 自动构建对象 (将构造对象的原型指向构造函数的原型)
- 自动执行构造函数(将当前构建对象作为this传递 执行对应的构造函数)
- 自动返回对象
使用工厂函数
批量生成对象,忽略细节
工厂函数和构造函数的区别
- 工厂函数批量生成忽略细节
- 构造函数一对一生成 关注细节
面向对象的三大特性 封装 (抽取对应的名词的属性,动词为方法)
页面上有个按钮 点击 你好 变为不好
继承 (子类继承父类的非私有内容)
多态 (基于继承关系 子类是父类的另一种形态体现) 重写 (子类重写父类的方法)
重载 (在一个类中 有两个同名的方法(通过参数个数及参数类型进行区分))
重载在js中不存在(js弱类型语句 不能强制指定类型 ,js的函数允许少传参及多传参,相同的变量会产生覆盖操作)