五、TypeScript class 类(三)

readonly

https://www.typescriptlang.org/docs/handbook/2/classes.html#readonly
你可以使用 readonly 关键字将属性设置为只读的。 只读属性必须在声明时或构造函数里被初始化。

class Animal {
    private age: Number;
    public readonly name: string;
    
    constructor(name: string, age: Number) {
        this.name = name;
        this.age = age;
    }

}
const dog: Animal = new Animal('zhangsan', 28)
// dog.name='李四'; // error 无法分配到 "name" ,因为它是只读属性
console.log(dog.name);

out

zhangsan

Getters / Setters

https://www.typescriptlang.org/docs/handbook/2/classes.html#getters–setters

class Animal {

     surname: string;
     name: string;

    get fullName():string{
        return this.surname+"-"+this.name; 
    }
    set fullName(fullName:string){
        const names = fullName.split('-')
        this.surname = names[0]
        this.name = names[1]
    }

}
const dog: Animal = new Animal()

dog.surname = '司马'
dog.name =  '三三'
console.log(dog.fullName)

dog.fullName = '西门-吃藕'
console.log(dog.surname, dog.name)

out

司马-三三
西门 吃藕

如果编译遇到

error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.

执行

tsc 文件.ts -t es5

static Members

https://www.typescriptlang.org/docs/handbook/2/classes.html#static-members

  • 静态属性, 是类对象的属性
  • 非静态属性, 是类的实例对象的属性
class Animal {

    static age: number;
    name: string;
    static getA() {
    // 静态方法,不能直接调用类里的属性
        /* console.log(this.name) */  /* error,不能直接调用类里的属性 */
        console.log(this.age + "岁的 小嫂子")
    }

}
Animal.age = 22;
Animal.getA()

out

22岁的 小嫂子

抽象类

https://www.typescriptlang.org/docs/handbook/2/classes.html#abstract-classes-and-members

用abstract定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现

1、抽象方法必须在抽象类中

2、抽象类和抽象方法是一个标准,定义标准后,子类中必须包含抽象定义的方法

abstract class Animal {
   age: number;
   name: string;

   constructor(name: string, age: number) {
       this.age = age;
       this.name = name;
   }
   abstract eat(): void;

}

class Dog extends Animal {

   constructor(name: string, age: number,) {
       super(name, age)
   }
   eat(): void {
       console.log("一条" + this.age + "岁的" + this.name + "小狗,每次吃饭都是哐哐猛吃,简直不敢相信.")
   }
}

const dog: Dog = new Dog('张思', 22);
dog.eat();

out

一条22岁的张思小狗,每次吃饭都是哐哐猛吃,简直不敢相信.

提示:

抽象类中可以没有抽象方法,但有抽象方法的一定是抽象类

上一篇:QQ邮箱自动删除邮件脚本


下一篇:JavaWeb-Servlet