类的基本使用

从ES6开始引入了class关键字,方便了类的定义和使用

定义类中的属性需要在constructor之前定义属性的类别,然后在constructor中用this.属性 的格式赋值,或者直接在定义类别时就赋值

类 - 图1

类的继承

我们可以使用extends关键字来实现类的继承,子类中使用super来访问父类

子类可以有自己的属性和方法,并且会继承父类中的属性和方法

在构造函数中,我们可以通过super来调用父类的构造方法,对父类的属性初始化(构造器中的super必须写在第一行类 - 图2

变量声明时类型声明是父类的,可以接收类型是子类的实例

类的成员修饰符

public:修饰的是在任何地方可见、共有的属性和方法,默认编写的属性就是public(默认

private:修饰的是仅在同一类中可见、私有的属性和方法(一般会封装方法来访问和设置

protected:修饰的是仅在类自身及子类中可见、受保护的属性和方法

只读属性readonly

用readonly修饰的属性是只读属性,不能在任何地方被修改,只有在定义时能赋值(最好在构造器里)

如果只读属性声明的是一个应用类型,那么它里面的返回器还是会改变

getter和setter访问器

可以写set get关键字开头的函数,表示可以通过get set 来控制变量的改变和获得

类 - 图3

类的静态成员

可以使用static来定义一个静态成员,可以是变量或者方法

通过static定义的成员,只能通过 类名.成员名 的形式来调用

抽象类

在定义很多通用的调用接口时,我们通常会让调用者传入父类,通过多态来试下更加灵活的调用方式

但是,父类本身可能并不需要对某些方法进行具体的实现,所以父类中定义的方法,我们可以定义为抽象方法

在typescript中没有具体实现的方法(没有方法体),就是抽象方法

  • 抽象方法必须存在于抽象类中
  • 抽象类是使用abstract声明的类

特点:

  • 抽象类是不能被实例的(也就是不能通过new创建)
  • 抽象方法必须被子类实现,否则该类必须是一个抽象类

类 - 图4

类的类型

类本身也可以当做一种类型来使用,使用起来和普通类型类似