typescript關(guān)于類的一些總結(jié)

1.什么是類?

我們從小到大都聽到很多關(guān)于類的詞語,比如植物類、動(dòng)物類、微生物類、顯而易見我們知道它們是有區(qū)別,且它們內(nèi)部又有共同的一些基礎(chǔ)特征,比如說:
貓類:皮毛顏色、貓叫;那你可能會(huì)想到對象,比如定義一只加菲貓:皮毛顏色:棕色
那么你會(huì)說那加菲貓也有這樣的屬性,那她是類嗎?

2.區(qū)分類和對象

類是抽象的,它描述了一些屬性和方法,比如貓類
對象是具體的,你也可以理解為它引申于類,比如加菲貓

3.如何創(chuàng)建類?

在es5中,其實(shí)我們是沒有類的概念的,我們使用構(gòu)造函數(shù)、原型鏈繼承
es6中使用class

3.1構(gòu)造函數(shù)方式
function Obj(){
    this.name="vicky";
    this.say=function(){
        alert("我是vicky");
    };
}
var obj1=new Obj();
console.log(obj1.name)
3.2原型鏈
function Obj(){
}
Obj.prototype.name="vickyfan";
Obj.prototype.say=function(){
    alert("vickyfan");
}
var obj1=new Obj();
console.log(obj1.name)
3.3.....其實(shí)還有工廠模式、原型加構(gòu)造函數(shù)等,這里就不一一說明了
3.4class
class Cat  {
    name: string;
    fur: string;
    //需要構(gòu)造函數(shù)初始化
    constructor(name: string, fur: string) {
        this.name = name;
        this.fur = fur;
    }
    miao () {
        //this訪問的是類的成員
        console.log('我叫'+this.name+',我的毛發(fā)顏色是'+this.fur+',喵喵喵~')
    }
}
let myCat = new Cat('mini','yellow')
myCat.miao()

4.繼承

什么是繼承?從字面理解就是可以能獲取一部分的東西,好比如說繼承財(cái)產(chǎn),但是這個(gè)東西我們在類中指的是屬性和方法;
子類(派生類):繼承人
基類(超類):被繼承人
MINI 繼承了車類的move函數(shù),實(shí)例minicooper這個(gè)對象,注意派生類MINI在使用constructor函數(shù)時(shí),要使用super,
他會(huì)執(zhí)行基類的構(gòu)造函數(shù),在使用this之前,必須調(diào)用super()
而且在派生類中我們重寫了move函數(shù),這使得當(dāng)我們定義了更多的派生類是,可根據(jù)需求重寫該方法

class Car {
    move (distance: number) {
        console.log('行駛了'+distance+'公里')
    }
}
class MINI extends Car {
    speed: number;
    constructor(speed: number) {
        //注意:派生類使用constructor時(shí),要使用super
        super()
        this.speed = speed
    }
    move (distance: number) {
        console.log('速度為'+distance+'公里每小時(shí)')
    }
}
let minicooper = new MINI(300)
minicooper.move(3000)

5.公共public,私有private與受保護(hù)protected的修飾符,默認(rèn)都是public

總結(jié)5.1:public不受限,private只能在該類中使用
class Cat {
    private name: string
    constructor(name: string) {
        this.name = name
    }
    bark () {
        console.log(this.name)
    }
}
let miao = new Cat('miao')
miao.bark()
console.log(miao.name)//屬性“name”為私有屬性,只能在類“Cat"中訪問
5.2總結(jié):protected與private很像,但是還是有區(qū)別,它可以在派生類訪問,
class Cat {
    protected name: string
    constructor(name: string) {
        this.name = name
    }
    bark () {
        console.log(this.name)
    }
}
class MI extends Cat {
    constructor(name: string) {
        super(name);
    }
    move () {
        console.log('我在跑步')
    }
}
let miao = new Cat('miao')
let miao1 = new MI('hahha')
miao.bark()

6.readonly只讀屬性:必須在聲明時(shí)或構(gòu)造函數(shù)里被初始化

class Cat {
    readonly name: string
    constructor(name: string) {
        this.name = name
    }
    bark () {
        console.log(this.name)
    }
}
let miao = new Cat('叮當(dāng)')
console.log(miao.name)//叮當(dāng)
miao.name = '杰瑞'//無法分配到“name”,因?yàn)樗浅?shù)或只讀屬性
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • alert(a); function name(parameters) { alert(parameters); ...
    name阿喆azhe閱讀 1,343評論 0 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,706評論 18 399
  • 昨天吃午飯的時(shí)候,聽到隔壁桌的兩個(gè)上了年紀(jì)的大叔再感概那句經(jīng)典的話語:學(xué)生時(shí)代是最幸福的時(shí)代,可惜過了那青蔥歲月,...
    南瓜先生的故事閱讀 300評論 0 0
  • 楔子 “我教你認(rèn)字好嗎?” “好呀好呀!” 樹蔭下,她梳著兩個(gè)羊角辮,又瘦又黃,一雙大眼睛忽閃忽閃的。 ...
    空虛的酒神閱讀 947評論 2 12
  • 閆老郎中去給陳甲送藥,一夜都沒有回來。鳳仙兒這一夜也沒怎么睡,把師父翻看的醫(yī)書又自己細(xì)細(xì)的看了一遍。從前,鳳仙兒在...
    兮云閱讀 480評論 0 8

友情鏈接更多精彩內(nèi)容