TS類

文檔
類就是用來創(chuàng)造對象的東西。
有一些語言(如 Java浸锨,存疑)創(chuàng)建對象必須先聲明一個類唇聘,而有的語言(JS)則不需要。

對于使用過 TS 的 JS 程序員來說柱搜,類可以讓你的系統(tǒng)更加「可預(yù)測」

這個對象不會出現(xiàn)一些我不知道的屬性迟郎,一切都盡在我的掌握。
代碼如下:

class Animal {
    kind: string;
    protected birth: string;
    // 非完全公開聪蘸,能在自己class內(nèi)使用和在后代使用
    constructor(kind: string){
        this.kind = kind;
        if (this.kind === '哺乳動物') {
            this.birth = '胎生';
        }else {
            this.birth = '卵生';
        }
    }
    move(): void {}
}

class Human extends Animal{
    static xxx = 1 // 不能在外面使用Human.xxx =1
    //上面為靜態(tài)屬性宪肖,不是對象的屬性,是Human的屬性
    name: string;
    private _age: number;
    private secret: string;
    //私有屬性健爬,只能在class內(nèi)被訪問控乾,其他默認為public
    get age() {
        return this._age
    }
    set age(value: number) {
        if(value < 0) {
            this._age = 0;
        }else {
            this._age = value;
        }
    }
    // get set設(shè)計模式,先把屬性設(shè)為私有娜遵,如果用戶訪問則返回并且進行設(shè)置
    constructor(name = 'fan', age = 18) { // 不傳為默認蜕衡,傳了可以改變
        super('哺乳動物');
 //對比interface 在類繼承時,必須調(diào)用super魔熏,相當(dāng)于調(diào)用了上個類的constructor
        this.name = name;
        this.age = age;
        this.secret = '這是我的secret'
    }
    move(): void {}
    say(): string {
        this.move(); // 可以自己調(diào)用自己衷咽,通過this溝通
        return 'hi'
    }
}
let fan = new Human();
console.log(fan)
let jack = new Human('jack',19) 
console.log(jack)
console.log(jack.constructor) 
jack.age = -1;
console.log(jack.age);
// 在JS中,constructor也是實例的屬性,擁有class的所有屬性和方法
// 在使用new的時候,會自動調(diào)用constructor
//在調(diào)用時淡喜,傳入?yún)?shù)损离,并傳給this,當(dāng)執(zhí)行完织中,對象的地址將會返還給實例,this消失

打印出的結(jié)果

Human {kind: "哺乳動物", birth: "胎生", name: "fan", _age: 18, secret: "這是我的secret"}
1.ts:47
Human {kind: "哺乳動物", birth: "胎生", name: "jack", _age: 19, secret: "這是我的secret"}
1.ts:49
function Human(name, age) { … }
1.ts:50
0
1.ts:52

語法

  1. 聲明類
  2. 聲明對象的非函數(shù)屬性
  3. 聲明對象的函數(shù)屬性
  4. 使用 constructor
  5. 聲明類的屬性(static)
  6. 使用 this 代指當(dāng)前對象(注意不要以為 this 永遠都代指當(dāng)前對象,JS 的 this 有更多功能相寇,而且默認 this 為 window)

類繼承類

  1. 使用 super

修飾符

public private 和 protected

訪問器

get 和 set

抽象類

也可以叫做「爸爸類」:專門當(dāng)別的類的爸爸的類。
也可以叫做「沒有寫完的類」:只描述有什么方法钮科,并沒有完全實現(xiàn)這些方法唤衫。

由于這個類沒有寫完,所以不能創(chuàng)建出對象绵脯。(會報錯)

abstract class Animal {
    abstract makeSound(): void;
    move(): void {
        console.log('roaming the earch...');
    }
}

abstract 就是抽象的意思佳励。我建議你不用管抽象是什么意思休里,就死記硬背:抽象類就是爸爸類。
抽象類不能創(chuàng)建實例(因為沒有寫完)

高級技巧

構(gòu)造函數(shù)(如果聽不懂這一節(jié)赃承,可以以后回頭再聽)

我有一篇文章可能給你啟發(fā):https://zhuanlan.zhihu.com/p/23987456

由于 TS 的 class 其實就是 JS 里的 class妙黍,JS 里的 class 其實就是一個構(gòu)造函數(shù)。
換句話說瞧剖,類就是一個函數(shù)……
同時拭嫁,函數(shù)在JS里,是一種對象抓于。
所以類其實是一種對象做粤。
我知道這聽起來很奇怪,但是 JS 就是這么奇怪毡咏。

class Greeter {
    static standardGreeting = "Hello, there";
    greeting: string;
    greet() {
        if (this.greeting) {
            return "Hello, " + this.greeting;
        }
        else {
            return Greeter.standardGreeting;
        }
    }
}

let greeter1: Greeter;
greeter1 = new Greeter();
console.log(greeter1.greet());

let greeterMaker: typeof Greeter = Greeter;  // 注意這句話
greeterMaker.standardGreeting = "Hey there!";

let greeter2: Greeter = new greeterMaker();
console.log(greeter2.greet());

把類當(dāng)做接口使用

接口是低配版的類驮宴。
類是高配版的接口。

class Point {
    x: number;
    y: number;
}

interface Point3d extends Point {
    z: number;
}

let point3d: Point3d = {x: 1, y: 2, z: 3};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呕缭,一起剝皮案震驚了整個濱河市堵泽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恢总,老刑警劉巖迎罗,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異片仿,居然都是意外死亡纹安,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門砂豌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厢岂,“玉大人,你說我怎么就攤上這事阳距∷#” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵筐摘,是天一觀的道長卒茬。 經(jīng)常有香客問我,道長咖熟,這世上最難降的妖魔是什么圃酵? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮馍管,結(jié)果婚禮上郭赐,老公的妹妹穿的比我還像新娘。我一直安慰自己确沸,他們只是感情好捌锭,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布躬存。 她就那樣靜靜地躺著,像睡著了一般舀锨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宛逗,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天坎匿,我揣著相機與錄音,去河邊找鬼雷激。 笑死替蔬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屎暇。 我是一名探鬼主播承桥,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼根悼!你這毒婦竟也來了凶异?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤挤巡,失蹤者是張志新(化名)和其女友劉穎剩彬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矿卑,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡喉恋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了母廷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轻黑。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖琴昆,靈堂內(nèi)的尸體忽然破棺而出氓鄙,到底是詐尸還是另有隱情,我是刑警寧澤椎咧,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布玖详,位于F島的核電站,受9級特大地震影響勤讽,放射性物質(zhì)發(fā)生泄漏蟋座。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一脚牍、第九天 我趴在偏房一處隱蔽的房頂上張望向臀。 院中可真熱鬧,春花似錦诸狭、人聲如沸券膀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芹彬。三九已至蓄髓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舒帮,已是汗流浹背会喝。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玩郊,地道東北人肢执。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像译红,于是被迫代替她去往敵國和親预茄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容