欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TypeScript深入 - 类

程序员文章站 2024-02-19 18:07:52
...

  class是TypeScript 的核心,使用TypeScript开发时,大部分代码都是写在类里面。

类的定义

如下形式:

class Person { 
    public name;
    public getName() { 
        console.log(this.name);
    }
}

var p1 = new Person();  //实例化
p1.name = "Batman";
p1.getName();

var p2 = new Person();
p2.name = "Superman";
p2.getName();

构造函数

  构造函数constructor,在实例化后外部是无法访问到它的,它是在实例化过程中自动调用的,且只调用一次。
  那么构造函数有什么用处呢?譬如在实例化一个人时候规定必须要给他起一个名字,那么就声明一个name属性,在构造函数中给它赋值,这样就可以在实例化过程保证必须给一个name的值才不会出错;但如果在构造函数中直接声明这个name属性的时候,则必须加*问控制符。

class Person { 
    constructor(public name: string) { 

    }
    public getName() { 
        console.log(this.name);
    }
}

var p1 = new Person("Batman");
p1.getName();

var p2 = new Person("Superman");
p2.getName();

继承

  继承中涉及到两个关键字 extends、super。

extends
class Person { 
    constructor(public name: string) { 

    }
    public getName() { 
        console.log(this.name);
    }
}

class Employee extends Person { 
    code: string;
    work() { 

    }
}

var e1 = new Employee("Tony");
e1.getName();

  定义一个Employee类继承Person类,那么实例化Employee类之后,就可以使用Person类中的name属性和getName方法,并且他自己还可以新增属性和方法。

super

super关键字有两个用法。
(1)super调用父类构造函数
  如果Employee类中想要新增一个构造函数,是为了在实例化时候必须增添这个员工的工号,那么继承父类的构造函数时,必须要使用super关键字调用父类的构造函数。

class Person { 
    constructor(public name: string) { 

    }
    public getName() { 
        console.log(this.name);
    }
}

class Employee extends Person { 
    constructor(name: string, code: number) { 
        super(name);
        this.code = code;
    }

    code: number;
    work() { 

    }
}

var e1 = new Employee("Tony",1);
e1.getName();

(2)super调用父类其他方法

class Person { 
    constructor(public name: string) { 
        console.log("Hello!")
    }
    public eat() { 
        console.log("I'm eating.");
    }
}

class Employee extends Person { 
    constructor(name: string, code: number) { 
        super(name);
        console.log("Hi!");
        this.code = code;
    }

    code: number;
    work() { 
        super.eat();
        this.doWork();
    }
    private doWork() { 
        console.log("I'm working.");
    }
}

var e1 = new Employee("Tony",1);
e1.work();