Skip to content

  1. 定义类

    ts
    class Person {
        name: string = 'iGma';
        age: number = 20;
    
        run(m: number) {
            console.log(`${this.name}跑步${m}米`);
        }
    }
    
    let per = new Person();
    per.run(100);
  2. 静态属性/方法:静态属性或方法不需要 new 类的实例,直接用类名即可调用。

    ts
    class Person {
        name: string = 'iGma';
        static age: number = 20;
    
        static run(m: number) {
            console.log('静态方法 run');
        }
    }
    
    console.log(Person.age);
    Person.run(100);
  3. 只读属性:只能读不能改

    ts
    class Person {
        readonly name: string = 'iGma';
        age: number = 20;
    }
    
    let per = new Person();
    per.name = 'hahaha';    // 报错
    per.age = 21;           // 正常

构造函数

  1. 定义

    ts
    class Person {
    	// 构造函数
        constructor() {
            console.log(this)
        }
    }
  2. 在创建类的实例对象时会执行该函数。此时的 this 就表示当前对象。

  3. 可以在这个函数中给属性赋值

    ts
    class Person {
        name: string
        age: number
        constructor(name: string, age: number) {
            this.name = name;
            this.age = age;
        }
    }
    
    let per = new Person('iGma', 20);
    console.log(per);

继承

  1. 定义

    ts
    class Person {
        id: number;
        name: string;
    
        constructor(id: number, name: string) {
            this.id = id;
            this.name = name;
        }
    }
    
    // 教师
    class Teacher extends Person {}
    
    let tea = new Teacher(230713, 'iGma');
    console.log(tea);
  2. 方法的重写

    ts
    class Person {
        id: number;
        name: string;
    
        constructor(id: number, name: string) {
            this.id = id;
            this.name = name;
        };
    
        run() {
            console.log(`跑步`);
        }
    }
    
    // 教师
    class Teacher extends Person {
        run() {
            console.log(`${this.name}在跑步`);
        }
    }
    
    let tea = new Teacher(230713, 'iGma');
    tea.run();
    console.log(tea);
  3. super:子类中使用 super 既是使用父类中的属性或方法。当 super 是一个方法时表示调用父类的构造方法。

    ts
    class Person {
        id: number;
        name: string;
    
        constructor(id: number, name: string) {
            this.id = id;
            this.name = name;
        };
    
        run() {
            console.log(`跑步`);
        }
    }
    
    // 教师
    class Teacher extends Person {
        subject: string;
        constructor(id: number, name: string, subject: string) {
            super(id, name);
            this.subject = subject;
            
            super.run();
        }
    }
    
    let tea = new Teacher(230713, 'iGma', '计算机');
    console.log(tea);

抽象类

  1. 抽象类不能用来创建对象,它是专门被其他类继承的。

  2. 代码

    ts
    abstract class Person {
        id: number;
        name: string;
    
        constructor(id: number, name: string) {
            this.id = id;
            this.name = name;
        };
    }
    
    // 教师
    class Teacher extends Person {}
    
    let tea = new Teacher(230713, 'iGma');
    let per = new Person(230714, 'aaa');    // 报错
  3. 抽象方法:定义在抽象类中,没有方法体,子类必须重写该方法。

    ts
    abstract class Person {
        id: number;
        name: string;
    
        constructor(id: number, name: string) {
            this.id = id;
            this.name = name;
        };
    
        abstract run(): void;
    }
    
    // 教师
    class Teacher extends Person {
        run(): void {
            console.log('跑步');
        }
    }
    
    let tea = new Teacher(230713, 'iGma');
    tea.run();

接口

  1. 作用:用来定义类的结构。规定类中应该包含哪些属性和方法。

  2. 接口可以重新声明。

  3. 接口中的属性和方法不能有实际值。

    ts
    interface user {
        name: string;
        age: number;
        run(): void;
    }
    
    class Us implements user {
        name: string;
        age: number;
        constructor(name: string, age: number) {
            this.name = name;
            this.age = age;
        };
        run() {
            console.log(123);
        }
    }

基于 MIT 许可发布