TypeScript學習筆記(三):類


在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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM