传统方法中,我们通过构造函数实现类的概念,通过原型链实现继承。而在 ES6 中,我们终于迎来了 class
。TypeScript 除了实现了所有 ES6 中的类的功能以外,还添加了一些新的用法。
ES6中类的用法
使用 class
定义类。使用 constructor
定义构造函数。通过 new
生成新实例的时候,会自动调用构造函数。
|
|
使用 extends
关键字实现继承,子类中使用 super
来调用父类的构造函数和方法。
使用 get
和 set
对某个属性设置存值函数和取值函数,拦截该属性的存取行为。
通过 static
关键字修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用。
TypeScript中类的用法
public、private和protected
TypeScript可以使用三种访问修饰符,分别是:public
、private
和 protected
。
- public 修饰的属性或方法是公有的,可以再任何地方被访问。默认所有的属性和方法都是 public 的;
- private 修饰的属性或方法是私有的,不能再声明它的类的外部访问;
- protected 修饰的属性或方法是受保护的,和 private 类似,区别是,它在子类中也是允许被访问的。
举例说明:
上例中,name
被设置为 public
,所以直接访问实例的 name 属性是被允许的。
很多时候,我们希望有的属性是无法直接存取的,这时候就要用到 private
了。
需要注意的是,TypeScript编译后的代码中,并没有限制 private 属性再外部的可访问性。下面是编译后的代码:
另外,使用 private 修饰的属性或方法在子类中是不允许访问的:
使用 protected 则允许在子类中访问
抽象类
abstract
用于定义抽象类和其中的抽象方法。
首先,抽象类不允许被实例化:
我们定义了一个类 cat 继承抽象类 Animal,但没有实现抽象方法 sayHi(),所以编译报错。
正确方法:
类的类型
|
|