面向对象

130 阅读2分钟

概述

面向对象是一种编程思维(opo),它主要的核心就是抽取对应的对象(封装, )(万物皆是对象),调用对象的方法。里面的主要的思维就是找有对应方法的对象做对应的事情(调用对应的方法)。

面向过程与面向对象

面向过程(关注与过程) 去餐馆吃饭

  • 1,出门
  • 2.去餐馆的路上
  • 3.进门点餐
  • 4.厨师做菜
  • 5.服务员上菜
  • 6.吃饭
  • 7.买单

面对对象(关注于对象)

去餐馆吃饭

  • 找餐馆这个对象

对象的创建

使用new 关键词

直接调用对应的构造函数 (es3)

image.png

调用class的constructor (es6)

image.png

class和构造函数的区别
  • class采用了严格模式 不能重复声明一个名字,会直接报错,而构造函数没有采用严格模式可以重复声明 只会覆盖
  • class 不会进行预编译 而构造函数会进行预编译
  • 构造函数可以不使用new 关键词调用,而class必须使用new 关键词调用 (不使用new关键词会报错)
  • class 里面的函数 默认可枚举属性
  • class 可以使用extends 来实现继承 它可以继承静态属性
new 关键词做了什么
  • 自动构建对象 (将构造对象的原型指向构造函数的原型)
  • 自动执行构造函数(将当前构建对象作为this传递 执行对应的构造函数)
  • 自动返回对象

使用工厂函数

批量生成对象,忽略细节

image.png

工厂函数和构造函数的区别
  • 工厂函数批量生成忽略细节
  • 构造函数一对一生成 关注细节

面向对象的三大特性 封装 (抽取对应的名词的属性,动词为方法)

image.png

页面上有个按钮 点击 你好 变为不好 image.png

继承 (子类继承父类的非私有内容)

image.png

多态 (基于继承关系 子类是父类的另一种形态体现) 重写 (子类重写父类的方法)

image.png

重载 (在一个类中 有两个同名的方法(通过参数个数及参数类型进行区分))

重载在js中不存在(js弱类型语句 不能强制指定类型 ,js的函数允许少传参及多传参,相同的变量会产生覆盖操作)