TypeScript?學(xué)習(xí)筆記之?typeScript類定義,類的繼承,類成員修飾符
前言:
typeScript
中的類與 ES6 中的類非常相似,如果不知道 ES6 中的類,建議先學(xué)習(xí)下 ES6 中的 class
。本篇文章重點(diǎn)介紹 typeScript 中的類定義、繼承以及修飾符。
1、類的定義
類描述了所創(chuàng)建的對象共同的屬性和方法。typeScript
支持面向?qū)ο蟮乃刑匦?,比如類、接口等?/p>
在 typeScript
中定義類的時候,使用 class 關(guān)鍵字,類名首字母使用大寫,類可以包含以下三個模塊:
- ?字段? - 字段是類里面聲明的變量,表示與對象有關(guān)的屬性。
- ?構(gòu)造函數(shù)? - 類實(shí)例化時自動調(diào)用,可以為實(shí)例化的對象分配內(nèi)存。
- ?方法? - 方法為對象要執(zhí)行的某種操作。
定義屬性的時候,需要添加屬性類型,構(gòu)造函數(shù)中的參數(shù)也需要加類型,引用任何一個類的成員的時候都用 this ,this 關(guān)鍵字表示當(dāng)前類實(shí)例化的對象。使用 new 關(guān)鍵字來實(shí)例化對象,并初始化它。
如示例:
class Web{ ?workTime: string ?constructor(n:string) { ? this.workTime = n ?} ?showWork(){ ? return "搬磚的前端" ?} } let qq = new Web("五年") console.log(qq.showWork()); console.log(qq.workTime);
編譯以上代碼,得到的 js 代碼如下:
"use strict"; class Web { ?constructor(n) { ? this.workTime = n; ?} ?showWork() { ? return "搬磚的前端"; ?} } let qq = new Web("五年"); console.log(qq.showWork()); console.log(qq.workTime);
2、類的繼承
typeScript
支持繼承類,即可以在創(chuàng)建類的時候繼承一個已存在的類,類繼承的時候使用 extends
關(guān)鍵字,基于類的程序設(shè)計中一種最基本的模式是允許使用繼承來擴(kuò)展現(xiàn)有的類。比如:
class Dirnks{ ?name: string ?constructor(n: string) { ? this.name = n ?} ?save(m: string) { ? console.log(`${this.name}飲料應(yīng)該${m}`); ?} } class Soda extends Dirnks{ ?constructor(n: string) { ? super(n) ?} } let kele = new Soda("可樂") kele.save("冷藏")
上述示例是一個最基本的類繼承,其中 Soda 繼承了 Dirnks
的屬性和方法,其中 Soda 是一個派生類,也叫做子類,Dirnks 是一個基類,也叫超類或父類。
派生類包含了一個構(gòu)造函數(shù),構(gòu)造函數(shù)必須調(diào)用 super() ,會執(zhí)行基類的構(gòu)造函數(shù)。需要注意的是:在子類構(gòu)造函數(shù)里訪問 this 的屬性之前,一定要先調(diào)用 super ,這是 typeScript
強(qiáng)制執(zhí)行的一條重要規(guī)則。
如果父類和子類都包含某一方法時,方法名相同,但是具體執(zhí)行內(nèi)容不同的時候,該執(zhí)行哪一個方法呢?
修改上述實(shí)例,給子類也添加一個方法,代碼如下:
class Dirnks{ ?name: string ?constructor(n: string) { ? this.name = n ?} ?save(m: string) { ? console.log(`${this.name}飲料應(yīng)該${m}`); ?} } class Soda extends Dirnks{ ?constructor(n: string) { ? super(n) ?} ?save() { ? return "存儲方法" ?} } let kele = new Soda("可樂") console.log(kele.save());
編譯以上代碼啊,得到的 js 代碼如下:
"use strict"; class Dirnks { ?constructor(n) { ? this.name = n; ?} ?save(m) { ? console.log(`${this.name}飲料應(yīng)該${m}`); ?} } class Soda extends Dirnks { ?constructor(n) { ? super(n); ?} ?save() { ? return "存儲方法"; ?} } let kele = new Soda("可樂"); console.log(kele.save());
此時會執(zhí)行子類中的方法。其原理是,類繼承后,子類可以對父類的方法進(jìn)行重新定義,這個過程稱之為方法的重寫。
typeScript
中子類只能繼承一個父類,雖然不支持繼承多個類,但是支持多重繼承。如下:
class One{ ?name: string ?constructor(n: string) { ? this.name = n ?} ?show() { ? return "展示" ?} } class Two extends One{ ?constructor(n:string) { ? super(n) ?} } class Three extends Two{ ?constructor(n: string) { ? super(n) ?} } let three = new Three("剁成") console.log(three.show());
3、修飾符
在 typeScript
中,可以使用訪問控制符來保護(hù)對類、變量、方法和構(gòu)造函數(shù)的訪問。typeScript
支持 3 種不同的訪問權(quán)限,分別為:
- ?public(默認(rèn))? - 公有,表示共享的屬性和方法??梢栽谌魏蔚胤奖辉L問。
- ?protected? - 受保護(hù),表示屬性和方法被保護(hù),可以被自身以及子類訪問,不能在類外面使用。
- ?private? - 私有,只能被其定義所在的類訪問。
- ?readonly? - 只讀,只讀屬性必須在聲明時或構(gòu)造函數(shù)里初始化。
?理解 public?
在上邊類中的成員定義的時候,沒有明確使用任何修飾符,默認(rèn)的就是 public
,所以可以將上面的類改寫為:
class HH{ ?public name: string ?public constructor(n: string) { ? this.name = n ?} } let h = new HH("HH") console.log(h.name);
使用 public
之后,對上面的應(yīng)用并沒有任何影響。
它的特點(diǎn):被它標(biāo)記的成員在類的里面、子類里面、類外面都可以訪問到。
?理解 protected?
類中添加 protected
修飾符來修飾成員時,將上述實(shí)例的 public 修飾符修改為 protected 如下:
class HH{ ?protected name: string ?constructor(n: string) { ? this.name = n ?} } let h = new HH("HH") console.log(h.name); // 此處報錯,提示 屬性"name"受保護(hù),只能在類 HH 及子類中訪問
它的特點(diǎn):被它標(biāo)記的成員在類的里面、子類里面能使用,但是在類的外面不能使用。
?理解 private?
class HH{ ?private name: string ?constructor(n: string) { ? this.name = n ?} } class H extends HH{ ?constructor(n: string) { ? super(n) ?} ?show() { ? console.log(this.name); // 報錯 ?} } let h = new H("HH") console.log(h.name); ?// 報錯 h.show()
上面的示例報錯,提示:屬性“name
”為私有屬性,只能在類“HH
”中訪問。
它的特點(diǎn):被它標(biāo)記的成員不能再聲明它的類的外部訪問。
到此這篇關(guān)于TypeScript 學(xué)習(xí)筆記之 typeScript類定義,類的繼承,類成員修飾符的文章就介紹到這了,更多相關(guān) typeScript類定義,類的繼承,類成員修飾符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序 天氣預(yù)報開發(fā)實(shí)例代碼源碼
這篇文章主要介紹了微信小程序 天氣預(yù)報開發(fā)實(shí)例代碼源碼的相關(guān)資料,這里含有源碼,需要的朋友可以參考下2017-01-01前端框架ECharts?dataset對數(shù)據(jù)可視化的高級管理
這篇文章主要為大家介紹了前端框架ECharts?dataset對數(shù)據(jù)可視化的高級管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12JavaScript面試數(shù)組index和對象key問題詳解
這篇文章主要為大家介紹了JavaScript面試數(shù)組index和對象key問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12js 實(shí)現(xiàn)Material UI點(diǎn)擊漣漪效果示例
這篇文章主要為大家介紹了js 實(shí)現(xiàn)Material UI點(diǎn)擊漣漪效果示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09微信小程序本作用域下調(diào)用全局JS詳解及實(shí)例
這篇文章主要介紹了微信小程序本作用域下調(diào)用全局JS詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-02-02JavaScript架構(gòu)搭建前端監(jiān)控如何采集異常數(shù)據(jù)
這篇文章主要為大家介紹了JavaScript架構(gòu)搭建前端監(jiān)控如何采集異常數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Intersection?Observer交叉觀察器示例解析
這篇文章主要為大家介紹了Intersection?Observer交叉觀察器示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02