类
在TypeScript中,类似于C#的结构,即一个文件中可以存在多个类,且文件名可以任意取,我们先看一个简单的类的示例。
1 class Person { 2 private name: string; 3 private age: number; 4 5 public constructor(name:string, age:number) { 6 this.name = name; 7 this.age = age; 8 } 9 10 public talk() {11 alert("Hi, my name is " + this.name + ", i am " + this.age.toString() + "!");12 }13 }14 15 function run() {16 var p: Person = new Person("Li Lei", 18);17 p.talk();18 }19 20 run();
TypeScript中的类需要注意下面几个点:
- class前不用加访问控制符,所有类都是全局公开可访问的;
- 如果类的属性和方法不加访问控制符则默认为public;
- 1.3开始支持protected访问权限,1.3之前仅支持public及private;
- 构造函数不是类名而是constructor;
- 访问类的成员变量及函数都需要加this关键字;
类的继承
在TypeScript中,如何实现类的继承呢,请看如下示例:
1 class Person 2 { 3 private name: string; 4 private age: number; 5 6 constructor(name: string, age: number) 7 { 8 this.name = name; 9 this.age = age;10 }11 12 talk()13 {14 alert("Hi, my name is " + this.name + ", i am " + this.age.toString() + "!");15 }16 }17 18 class Student extends Person19 {20 private school: string;21 22 constructor(name: string, age: number, school: string)23 {24 super(name, age);25 this.school = school;26 }27 28 talk()29 {30 super.talk();31 alert("And I`m in " + this.school + "!");32 }33 }34 35 function run()36 {37 var p: Person = new Student("Li Lei", 18, "English School");38 p.talk();39 }40 41 run();
类的继承需要注意以下几点:
- 继承使用extends关键字;
- 调用父级使用super关键字;
- 重写父级方法不需要加override关键字,直接定义一样的方法即可;
- 父级变量可以调用到子级的方法,符合多态的概念;
getter/setter封装
在TypeScript中我们可以对一个成员变量进行getter和setter的封装,如下:
1 class Person 2 { 3 private _name:string; 4 5 constructor(name: string) 6 { 7 this._name = name; 8 } 9 10 set name(value:string) {this._name = value;}11 get name() {return this._name;}12 13 talk()14 {15 alert("Hi, my name is " + this.name + "!");16 }17 }18 19 function run()20 {21 var p:Person = new Person(null);22 p.name = "Li Lie";23 p.talk();24 }25 26 run();
静态数据和方法
在TypeScript中,是可以使用Static来定义静态变量及静态函数的,我们以单例类为例来看看:
1 class Person 2 { 3 private static _instance:Person; 4 5 static getInstance():Person 6 { 7 if(this._instance == null) 8 { 9 this._instance = new Person();10 }11 return this._instance;12 }13 14 talk()15 {16 alert("Hi, my name is Li Lie!");17 }18 }19 20 function run()21 {22 Person.getInstance().talk();23 }24 25 run();
reference
TypeScript允许多个类在同一个文件里,但如果类与类在不同的文件,需要这种写法:
1 ///2 class ComplexWebSocket extends SimpleWebSocket {3 ...4 }