一、类
之前在typescript(3)中定义的类不是合法的ts类,下面进行修改:
class Human {
static totalPeople = 0;
_name: string;
constructor(name) {
this._name = name;
Human.totalPeople += 1;
}
get name() {
return this._name;
}
set name(val) {
this._name = val;
}
talk() {
return `Hi, I'm ${this.name}!`;
}
}
与之前的区别只在于_name属性的声明是强类型的,下面是使用方法:
let human = new Human('foo');
console.log(human._name);
注意:ts中构造函数是由constructor()函数指定的。
二、抽象类与继承
基类:
abstract class Duck{
flyBehavior: FlyBehavior;
quackBehavior:QuackBehavior;
constructor(){
}
abstract diaplay():void;
performFly():void{
this.flyBehavior.fly();
}
performQuack():void{
this.quackBehavior.quack();
}
swim():void{
console.log("All ducks float, even decoys!");
}
setFlyBehavior(fb:FlyBehavior){
this.flyBehavior = fb;
}
}
继承类:
class MallardDuck extends Duck{
constructor(){
super();
this.quackBehavior = new Quack();
this.flyBehavior = new FlyWithWings();
}
diaplay():void{
console.log("I'm a real Mallard duck");
}
}
没有super()函数会报错。
不能把构造函数写成MallardDuck(){},这样会被当成普通函数,需要调用才能执行而不是new一个实例的时候就执行构造。