类
在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 Person
19 {
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 /// <reference path="SimpleWebSocket.ts"/>
2 class ComplexWebSocket extends SimpleWebSocket {
3 ...
4 }