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();