[TypeScript]4.物件導向-類別(Class)的使用方式

文、意如

TypeScript系列:
1.TypeScript初探篇
2.認識原始資料型別
3.認識物件型別
[本篇]4.物件導向-類別(Class)的使用方式
5.物件導向-介面(Interface)的使用方式

 

在使用javascript時以往都是使用建構函式來實現類別,現在Javascript的ES6(含以上的版本) 已經完全支持類別(Class)的功能了,接下來我們就來好好認識一下在TypeScript中如何使用類別。

 

認識類別
ㄧ.建立類別
二.繼承類別
三.認識物件
四.認識static靜態方法
五.認識修飾符(AccessModifiers)-public/private/protected

 

 

認識類別
類別中可定義屬性及方法
constructor 定義建構函式,也叫做建構子
透過 new 產生新實例(呼叫類別)時,會自動呼叫建構子。
呼叫類別的變數可叫做物件

 

ㄧ、建立類別
class Myinfo {//類別名稱
    city:string;//定義類別變數
    constructor(city) { //建構子(呼叫類別時一定會執行)
        this.city = city; //將傳進來的參數存入類別變數中

    }
    helloCity() { //類別函數
        return `Hello,City: ${this.city}`;
    }
}

var a = new Myinfo('台北');//建立實例呼叫類別(a就成了物件)
console.log(a.helloCity()); // Hello,City: 台北 (使用物件去調用方法)

 

二、繼承類別

 

1.使用extends 來繼承父類別
2.繼承類別的稱子類別
3.可使用 super 關鍵字來呼叫父類別的建構子和函數(方法)

 

class Country extends Myinfo {
    constructor(city) {
        super(city); // 呼叫父類別的 constructor(city)
        console.log(this.city);//高雄
    }
    helloCity() {
        return 'Hi, ' + super.helloCity(); // 呼叫父類別的 helloCity()
        //Hi, Hello,City: 高雄
    }
}

var c = new Country('高雄'); // 高雄
console.log(c.helloCity()); // Hi, Hello,City: 高雄

 

三、認識物件
變數只要呼叫類別即成為物件
可使用物件來讀取值
可用物件來賦予值

 

class Myinfo {//類別名稱
    city:string;//定義類別變數
    constructor(city) { //建構子(呼叫類別時一定會執行)
        this.city = city; //將傳進來的參數存入類別變數中
    }
    helloCity() { //類別函數方法
        return `Hello,City: ${this.city}`;
    }
}

var a = new Myinfo('台北');//1.   變數只要呼叫類別即成為物件
console.log(a.helloCity());// Hello,City: 台北 (使用物件去調用方法)2.  可使用物件來讀取值
a.city='桃園'//3.可用物件來賦予值
console.log(a.helloCity());// Hi, Hello,City: 桃園 2. 可使用物件來讀取值
四、認識static靜態方法

使用 static稱為靜態方法,它們不需要實例化(new),而是直接透過類別來呼叫使用。

//static靜態
class Myinfo {//類別名稱
    static myid = 12345;//static稱為靜態方法
    city: string;//定義類別變數
    constructor(city) { //建構子(呼叫類別時一定會執行)
        this.city = city; //將傳進來的參數存入類別變數中
    }
    helloCity() { //類別函數方法
        return `Hello,City: ${this.city}`;
    }
}
console.log(Myinfo.myid); 
//static稱為靜態方法,它們不需要實例化(new),而是直接透過類別來呼叫使用。

 

 

五、認識修飾符(AccessModifiers)-public/private/protected

 

TypeScript 可以使用三種修飾符(Access Modifiers),分別是 public、private 和 protected。

Public(預設):屬性或方法是公有的,可以在任何地方被訪問到。
Private:屬性或方法是私有的,不能在宣告它的類別(Class)的外部訪問。
Protected:屬性或方法是受保護的,它和 private 類似,區別是它在子類別中也是允許被訪問。
Public(預設)屬性或方法是公有的,可以在任何地方被訪問到。
//public
class Myinfo {//類別名稱
    public city: string;//定義類別變數
    public constructor(city) { //建構子(呼叫類別時一定會執行)
        this.city = city; //將傳進來的參數存入類別變數中
    }
    helloCity() { //類別函數方法
        return `Hello,City: ${this.city}`;
    }
}

var abc = new Myinfo('台北');//一般是需要實例化(new),才可以使用屬性與方法
console.log(abc.helloCity());//Hello,City: 台北

 

 

一張含有 文字 的圖片

自動產生的描述
Private:屬性或方法是私有的,不能在宣告它的類別(Class)的外部訪問。
//private
class Myinfo {//類別名稱
    private city: string;//定義類別變數
    public constructor(city) { //建構子(呼叫類別時一定會執行)
        this.city = city; //將傳進來的參數存入類別變數中
    }
    helloCity() { //類別函數方法
        return `Hello,City: ${this.city}`;
    }
}

var abc = new Myinfo('台北');//一般是需要實例化(new),才可以使用屬性與方法
console.log(abc.city);//台北

 

 

Protected:屬性或方法是受保護的,它和 private 類似,區別是它在子類別中也是允許被訪問。

 

//protected
class Myinfo {//類別名稱
    protected city:string;//定義類別變數
    constructor(city) { //建構子(呼叫類別時一定會執行)
        this.city = city; //將傳進來的參數存入類別變數中
    }
}
class Country extends Myinfo {
    constructor(city) {
        super(city); // 呼叫父類別的 constructor(city)
        console.log(this.city);//protect可訪問
    }
}
var c = new Country('高雄'); // 高雄
console.log(c.city); //protect不可訪問

 

 

 

下一篇:TypeScript物件導向-介面(Interface)的使用方式

 


 

Yiru@Studio - 關於我 - 意如