面向对象
概述
面向对象是一种编程思想(oop),他主要的核心就是抽取对应的对象(封装)万物皆对象,调用对象的方法。里面的主要的思维就是找有对应的方法的对象做对应的事情(调用对应的方法)
面向对象与面向过程
- 面向过程(关注于过程)
- 面向对象(关注于对象)
对象的构建
使用new关键词
直接调用对应的构造函数(es3)
构造函数 首字母大写
调用class的constructor(es6) 使用工厂函数
class和构造函数的区别
- class使用了严格模式 不能重复声明一个名字 构造函数没有使用严格模式 可以重复声明
- class 不会预编译 构造函数会预编译
- class必须使用new关键词调用(不使用new关键词会报错) 构造函数可以不使用new 关键词调用
- class可以使用extends来继承 它可以继承静态属性
工厂函数和构造函数的区别
- 工厂函数 批量生产生成 忽略细节
- 构造函数 一对一生成 关注细节
new关键词做了什么
- 自动构造对象(将构造对象的原型指向构造函数的原型)
- 自动执行构造函数(将当前构造对象作为this传递 执行对应的构造函数)
- 自动返回对象
面向对象的三大特性
封装 (抽取对应的名词为属性 抽取对应的动词为方法)
继承 (子类继承父类的非私有内容)
多态 (基于继承关系 子类是父类的另一种形态体现)
- 重写(子类重写父类的方法)
- 重载(在一个类中 有两个同名的方法 (通过参数个数及参数类型进行区分)) 重载在js中不存在 (js弱类型语句 不能强制性指定类型,js的函数允许少传参,相同的变量在同一作用域内会产生覆盖)