class类继承 TS面向对象编程

82 阅读3分钟

js中的继承

image.png

image.png

父类有的方法 属性 孩子都可以继承 直接拿来用

子有的属性 方法 父没有 这就是多态
class声明父类Parent 子通过class声明子类Son通过 extends继承父类
子类构造函数constructor中用super关键字直接继承父类Parent的属性 改变父类constructor中this指向 原指向父类实例对象p 现在指向子类实例对象s1
-----注意-----
子类s1的属性score 要写在super关键字下 才能拿到constructor的this

TS面向对象编程

image.png 面向对象编程中一个重要的核心就是:
 ,当我们使用面向对象的方式进行编程的时候,通常会首先 去分析具体要实现的功能把特性相似的抽象成一个一个的类,然后通过这些类实例化出来的具体对象 来完成具体业务需求。
2在类的基础中,包含下面几个核心的知识点,也是 TypeScript 与 *EMCAScript2015+ * 在类方面共有 的一些特性

  • class 关键字
  • 构造函数: constructor
  • 成员属性定义
  • 成员方法
  • this关键字

3.构造函数

通过 class 定义了一个类以后,我们可以通过 new 关键字来调用该类从而得到该类型的一个具体对 象:也就是实例化

为什么类可以像函数一样去调用呢,其实我们执行的并不是这个类,而是类中包含的一个特殊函数:构造函数 constructor

  • 默认情况下,构造函数是一个空函数
  • 构造函数会在类被实例化的时候调用
  • 我们定义的构造函数会覆盖默认构造函数
  • 如果在实例化(new)一个类的时候无需传入参数,则可以省略 ()
  • 构造函数 constructor 不允许有 return 和返回值类型标注的(因为要返回实例对象

通常情况下,我们会把一个类实例化的时候的初始化相关代码写在构造函数中,比如对类成员属性的初始化赋值

构造函数参数属性

因为在构造函数中对类成员属性进行传参赋值初始化是一个比较常见的场景,所以 ts 提供了一个简化 操作:给构造函数参数添加修饰符来直接生成成员属性

  • public 就是类的默认修饰符,表示该成员可以在任何地方进行读写操作.

    • 给当前类添加同名的成员属性
    • 在类实例化时,会把传入的参数赋值给对应的成员属性

二、继承

在 ts 中,也是通过 extends 关键字来实现类的继承

三、super 关键字

在子类中,我们可以通过 super 来引用父类

  • 如果子类没有重写构造函数,则会在默认的 constructor 中调用 super()
  • 如果子类有自己的构造函数,则需要在子类构造函数中显示的调用父类构造函数 : super(//参 数) ,否则会报错
  • 在子类构造函数中只有在 super(//参数) 之后才能访问
  • this 在子类中,可以通过 super 来访问父类的成员属性和方法
  • 通过 super 访问父类的的同时,会自动绑定上下文对象为当前子类 this

四、修饰符

有的时候,我们希望对类成员(属性、方法)进行一定的访问控制,来保证数据的安全,通过 类修饰符 可以做到这一点,目前 TypeScript 提供了四种修饰符:

  • public:公有,默认 。访问级别:自身、子类、类外。
  • protected:受保护。访问级别:自身、子类。
  • private:私有 。访问级别:自身
  • readonly:只读,只针对成员属性,必须在声明时或者构造函数内初始化。访问级别:自身、子类、类外。