面向对象
概念
面向对象
特点:封装(只关注输入输出,不关系内部实现)、继承(能力借用)、多态(不同对象针对同一操作能产出不同结果)
概念:做一件事应该找谁做
面向过程
概念:做一件事应该怎么做
实例
甲乙两人下象棋
面向过程的实现大概就是:摆好棋盘--甲走马--判断输赢--乙走炮--判断输赢--乙赢
面向对象则可以拆分成两个:下棋者和棋盘,则下棋者出棋--棋盘判定结果
应用场景
参与方较多的复杂场景
创建方式
原型对象与原型链
new操作符
创建一个新对象
将该对象指向原型对象
将实例的this指向该对象
返回this(若构造函数内没有return或者return了一个基本类型,则返回this)
原型对象
需要经过new创建,该操作符为创建出的对象提供了共有空间,即prototype
对于实例而言,需要通过__proto__访问该共有空间,类则通过prototype访问
原型链
原型链是经过new操作符后自动在内存中开辟的空间,它的终点是null
查找方式是就近原则
继承
原型链继承:将原型对象指向继承目标的实例(共有)
查找过程
查找this.name,没有
查找c.__proto__,找到
弊端
引用类型的共有属性互相影响
无法传参
借用继承:利用call将值挂载到当前的this(复制)
弊端
由于调用call只是相当于将Parent上的属性或方法copy了一份到当前,只是形式上少写了一部分代码,本质上还是在每个实例上都生成了一份,并非真正的共享
组合继承:将共有函数放在原型对象
缺陷
父类每次继承会被调用两次,而且也没啥意义,因为call后子类的实例的key一定是和父类一样的
寄生组合式继承: