类
使用类的一个例子
class Greeter{
greeting: string;
constructor(greet: string){
this.greeting = greet;
}
greet(){
return "Hello! " + this.greeting;
}
}
这个类中含有一个属性,一个构造函数和一个方法。引用任何一个类成员时都需要使用this
。
类定义会创建两个东西—— 类的实例类型和一个构造函数,因为类可以创造出类型,所以你可以在使用接口的地方使用类。
class Point {
x: number;
y: number;
}
interface Point3d extends Point {
z: number;
}
let point3d: Point3d = {x: 1, y: 2, z: 3};
类的继承
使用extends关键字创建派生类,派生类继承父类的属性和方法。派生类通常也被叫做子类。
class animal{
name: string;
constructor(vname: string){
this.name = vname;
}
move(distance: number){
console.log(`${this.name} move ${distance} meters`);
}
}
class Dog extens animal{
constructor(name: string){
super(name);
}
move(distance: number){
console.log("Dog moving...");
super.move(distance);
}
}
class Horse extens animal{
constructor(name: string){
super(name);
}
move(distance: number){
console.log("Horse moving...");
super.move(distance);
}
}
pubulic、private、protected
public
类中的成员默认都为public
,当然你也可以显式声明。
private
当成员被标记为private
时,它将不能在类的外部被访问。
protected
当成员被标记为protected
时,它不能够在类的外部被访问,但是可以在派生类中被访问。
readonly修饰符
在类中,你可以使用readonly
修饰符对属性进行修饰,被修饰的属性只能在声明时或者在构造函数中被访问。
getters/setters存取器
getters/setters
存取器可以截取对对象成员的访问。
只带有get
不带有set
的类,其成员属性会被认为是只读
的。
let password = 'right';
class employee{
private _fullname: string;
get fullname():string {
return this.fullname;
}
set fullname(vfullname: string){
if(password && password == 'right'){
this.fullname = vfullname;
}else{
console.log('Error');
}
}
}
let employee = new Employee();
employee.fullname = 'Dane DeHaan';
if(employee.fullname){
alert(employee.fullname);
}
静态属性
使用static
关键字创建静态成员,这些静态属性存在于类的本身而不是类的实例上。每次访问静态属性时,在前面加上类名,并使用.
来衔接两者。
抽象类
使用abstract
关键字声明抽象类和抽象方法。抽象类中有抽象成员和非抽象成员,非抽象成员可以有具体的实现细节,而抽象成员必须在派生类中实现。
小芝士:
prototype
是JS中函数对象的一个属性,每个函数都有一个prototype
属性。当使用这个函数作为构造函数来实例化一个对象时,这些对象实例可以继承构造函数prototype
上的一些属性和方法。这是JS实现继承机制的一种重要方式。