typescript
中的类扩展了ES6中的类,在其基础上扩展了以下语法:
- 访问修饰符
- 静态属性
- 抽象类
访问修饰符
typescript
提供了下列修饰符:
public
:公共的(类中的成员默认为public
)private
:私有的(不能在声明它的类的外部访问)protected
:受保护的(protected
修饰符与private
修饰符的行为很相似,但有一点不同,protected
成员在派生类中仍然可以访问)
class Animal {
public name: string;
private age: number;
public constructor(theName: string,age:number) {
this.name = theName;
this.age = age;
}
public move(distanceInMeters: number) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
new Animal("Cat",12).age; // 错误: 'age' 是私有的.
readonly修饰符
使用readonly
关键字可以将属性设置为只读的。 只读属性必须在声明时或构造函数里被初始化。
class Octopus {
readonly name: string;
readonly numberOfLegs: number = 8;
constructor (theName: string) {
this.name = theName;
}
}
let dad = new Octopus("Man with the 8 strong legs");
dad.name = "Man with the 3-piece suit"; // 错误! name 是只读的.
readonly修饰符也可以用在参数上
class Octopus {
readonly numberOfLegs: number = 8;
constructor(readonly name: string) {
}
}
public
、private
、protected
同样可以用在参数上
readonly
VS const
最简单判断该用readonly
还是const
的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用
const
,若做为属性则使用readonly
。
静态属性
typescript
中通过使用static
来定义静态属性:
class bike{
static origin:number = 12;
constructor (public scale: number) { }
static getName(){}
}
抽象类
抽象类做为其它派生类的基类使用。 它们一般不会直接被实例化。 不同于接口,抽象类可以包含成员的实现细节。
abstract
关键字是用于定义抽象类和在抽象类内部定义抽象方法。
abstract class Animal {
abstract makeSound(): void;
move(): void {
console.log('roaming the earch...');
}
}
抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。 抽象方法的语法与接口方法相似。 两者都是定义方法签名但不包含方法体。 然而,抽象方法必须包含abstract
关键字并且可以包含访问修饰符。