面向对象
面向对象的三大特征:封装、继承、多态。
成员属性和方法,公开、私有、静态
公开:在外使用对象.属性或方法名,可以被自由的调用和继承
私有:对内不对外,使用对象.属性或方法名,无法被调用,但在类中的所有方法可以自由的访问它;也无法被继承
静态:静态属性和静态方法,是属于构造函数的,只能通过类名.属性或方法声明的,无法通过实例获取
在JavaScript中,私有属性和方法都是通过作用域模拟的,在ES2022中加入了#
字段来表示私有属性和方法。
封装
因为对象需要对自己负责,对象的很多东西都不需要或者不可以暴露给外部。
所以,封装的主要作用是解决数据的安全性,内在也体现了“每个对象对自己负责”的原则。
方法的封装:就是将方法私有化,同时需要提供用于设置和读取的set/get方法,让外部使用我们提供的方法
属性的封装:属性私有化,同时需要提供用于设置和读取的set/get方法
继承
主要目的是为了解决代码的复用
实现代码的复用有两种方式:组合 和 继承
那么什么时候该用组合?什么时候该用继承呢?
多态
同一个操作,作用于不同的对象,会产生不同的结果。
即发出一个相同的指令后,不同的对象会对这个指令有不同的反应。
好处:灵活、解耦
耦合度:模块和模块之间,代码和代码之间的关联度
紧耦合就是它们之间的关联度大,代码很难维护,很容易出bug,而且出现一个bug,其他bug很可能像滚雪球一样增长,猝不及防。
多态性,要求我们面向接口编程。
TS 中我们可以定义一个方法不去实现,并且将这个方法置为抽象方法,当时我们的类也就必须为抽象类了,在前面添加 abstract
字段。然后让子类继承的时候去继承并实现这个方法(子类中也必须要包含这个抽象类中的抽象方法)