摘要:再拿動物來說,鳥類是動物的一種,它不光繼承了動物的特性,它還有自己的專屬特性它有翅膀,它能飛。常見多態(tài)有覆蓋重載兩類。抽象類抽象方法抽象類不能實(shí)例化,抽象方法不能實(shí)現(xiàn),需要在子類中實(shí)現(xiàn)。抽象類實(shí)現(xiàn)子類繼承了父類的類,是相對的。
類-面向?qū)ο蟮幕A(chǔ)
面向?qū)ο缶幊?,?yīng)該是目前使用最廣泛的編程模式。
JavaScript是基于原型的語言,自從廣泛使用之后,面向?qū)ο蟮母脑煲恢睕]停過,不少第三方庫都使用原型實(shí)現(xiàn)了JavaScript下面的類,如:MooTools,Backbone。再到ES6標(biāo)準(zhǔn),直接原生支持了類定義,不過只能算語法糖級的支持。
TypeScript對面向?qū)ο笾С值母鼜氐?,非常接近Java、C#語言,支持接口、類、抽象、繼承、可見性等面向?qū)ο筇匦浴?/p> 面向?qū)ο笕筇卣?/b> 抽象
即同一類事物,我們可以把它抽象成一個(gè)描述,就是類。對外,我們看到的就是這個(gè)類描述,它有什么屬性,它能干嘛,取決于它對外公開的屬性和方法。它的內(nèi)部如何運(yùn)作,我們無需關(guān)注。
比如我們要用面向?qū)ο笳Z言描述動物:動物有一個(gè)名字,動物能移動。它怎么做到移動呢,外部是不用關(guān)心的。
繼承如果抽象是基礎(chǔ),那么繼承就是面向?qū)ο蟮母叻濉3橄蠼o了編程語言描述世界的畫筆,那么繼承就給了它色彩。
繼承類擁有父類公開的、保護(hù)的屬性和方法,同時(shí)還可以添加自己的屬性和方法。
一般分為實(shí)現(xiàn)繼承、接口繼承。
再拿動物來說,鳥類是動物的一種,它不光繼承了動物的特性,它還有自己的專屬特性:它有翅膀,它能飛。
多態(tài)多態(tài)簡單來說,就是同一個(gè)類的對象,表現(xiàn)出不同的特性,是繼承延伸出來的表現(xiàn)結(jié)果。
常見多態(tài)有覆蓋、重載兩類。
TypeScript中的類方法不支持真正意義上的重載,可以通過增加可選參數(shù)來達(dá)到重載的目的。
具體的原因,是因?yàn)橹剌d在編譯之后,是以多個(gè)不同名的函數(shù)存在的,調(diào)用哪個(gè)也是編譯的時(shí)候確定的。而TypeScript需要支持JavaScript來調(diào)用它,JavaScript不知道編譯之后的函數(shù)名。
后面會拿一篇文章來分析。
還是拿動物為例,繼承并覆蓋move方法之后,鳥類實(shí)現(xiàn)了飛、魚類實(shí)現(xiàn)了游。
TypeScript中類使用的常見場景使用TypeScript描述類。
// 知識點(diǎn):抽象類 abstract class Animal { // 知識點(diǎn):私有成員 private _name: string; // 知識點(diǎn):存取器 get name(): string { return this._name; } constructor(name: string) { this._name = name; } // 知識點(diǎn):抽象方法 abstract move(distance: number): void; }
描述子類
// 知識點(diǎn):實(shí)現(xiàn)抽象類的子類 class Bird extends Animal { // 知識點(diǎn):只讀成員 // 知識點(diǎn):靜態(tài)成員 static readonly classification = "bird"; // 知識點(diǎn):super() constructor(name: string) { super(name); } // 知識點(diǎn):抽象方法實(shí)現(xiàn) move(distance: number): void { console.log(`moved ${distance}.`) } } const enum MoveMode { WALK, FLY } // 知識點(diǎn):子類 class Owl extends Bird { private _mode: MoveMode; get mode(): MoveMode { console.log("read move mode."); return this._mode; } set mode(mode: MoveMode) { console.log("changed move mode."); this._mode = mode; } // 知識點(diǎn):super() constructor(name: string) { super(name); this._mode = MoveMode.FLY; } // 知識點(diǎn):方法覆蓋 move(distance: number): void { switch (this._mode) { case MoveMode.FLY: console.log(`fly ${distance}.`); break; case MoveMode.WALK: console.log(`walked ${distance}.`); break; default:; } } }類相關(guān)的知識點(diǎn)總結(jié)
從上述示例中,整理出以下知識點(diǎn),請結(jié)合示例回顧,加強(qiáng)一下理解。
抽象類、抽象方法
抽象類不能實(shí)例化,抽象方法不能實(shí)現(xiàn),需要在子類中實(shí)現(xiàn)。
抽象類實(shí)現(xiàn)
子類
繼承了父類的類,是相對的。
類成員可見性
public,公開,默認(rèn)的可見性
protected,保護(hù),子類可見
private,私有,本類可見
靜態(tài)成員
靜態(tài)成員屬于類
只讀成員
只讀,即初始化后不可修改,只能在聲明和構(gòu)造函數(shù)里初始化。
類成員存取器
可以像成員一樣來訪問,一般用來做一些處理,比如校驗(yàn),格式化等。
類方法覆蓋
覆蓋父類方法,實(shí)現(xiàn)自己的特性。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/110301.html
摘要:學(xué)習(xí)之路學(xué)習(xí)之路安裝環(huán)境起步開發(fā)工具自動編譯文件中的數(shù)據(jù)類型中的函數(shù)中類的定義繼承中的繼承中的繼承類的靜態(tài)屬性和靜態(tài)方法類的多態(tài)的抽象類中的接口中的泛型學(xué)習(xí)之路安裝環(huán)境查看版本起步新建通過命令編譯此時(shí)路徑下 ...
摘要:是的超級,遵循最新的規(guī)范相當(dāng)于包含了的語法。表示方法沒有返回任何類型類型表示的是那些永不存在的值的類型,例如異常錯(cuò)誤寫法錯(cuò)誤三函數(shù)內(nèi)容概述函數(shù)的定義可選參數(shù)默認(rèn)參數(shù)剩余參數(shù)函數(shù)重載箭頭函數(shù)。 一、Typescript 介紹、環(huán)境搭建 1.1 Typescript 介紹 1.TypeScript 是由微軟開發(fā)的一款開源的編程語言,像后端 java、C#這樣的面向?qū)ο笳Z言可以讓 js 開發(fā)...
摘要:序列文章從項(xiàng)目中由淺入深的學(xué)習(xí)微信小程序和快應(yīng)用從項(xiàng)目中由淺入深的學(xué)習(xí)前言為什么會有大家有沒想過這個(gè)問題原因是是弱類型編程語言也就是申明變量類型可以任意變換。是的超集,也相當(dāng)于預(yù)處理器本文通過一個(gè)項(xiàng)目來讓你快速上手。 showImg(https://segmentfault.com/img/bVbruJw?w=1024&h=768); 序列文章 從項(xiàng)目中由淺入深的學(xué)習(xí)vue,微信小程序...
摘要:是事件驅(qū)動的,只根據(jù)用戶的操作做出相應(yīng)的反應(yīng)處理。中的數(shù)據(jù)要求帶有明確的類型,不要求。這些小小的變化可能會產(chǎn)生嚴(yán)重的意想不到的后果,因此有必要撤銷這些變化。的優(yōu)勢相比于,也有一些明顯優(yōu)勢。因此在應(yīng)對大型開發(fā)項(xiàng)目時(shí),使用更加合適。 showImg(https://segmentfault.com/img/bV1Dx7?w=740&h=322); TypeScript 和 JavaScri...
摘要:接口前端程序員很難理解的點(diǎn)也是一門面向?qū)ο蟮恼Z言,但是中它是基于原型實(shí)現(xiàn)的,中使用了類,這樣會更清晰的體會到面向?qū)ο筮@一說法,但是實(shí)際在中的面向?qū)ο蟾油暾@些語言一樣,通過接口和類去完整的面向?qū)ο缶幊獭? 從入門到放棄的java 初中時(shí)自學(xué)過JAVA,學(xué)了大概一個(gè)多月吧, 學(xué)了一個(gè)多月,看視頻這些,后面放棄了編程。 依稀記得,那段日子極度苦逼,我想如果當(dāng)時(shí)是學(xué)javaScrip...
閱讀 1671·2021-11-12 10:35
閱讀 1618·2021-08-03 14:02
閱讀 2688·2019-08-30 15:55
閱讀 2028·2019-08-30 15:54
閱讀 762·2019-08-30 14:01
閱讀 2429·2019-08-29 17:07
閱讀 2254·2019-08-26 18:37
閱讀 3034·2019-08-26 16:51