TypeScript學習(三)ts中的類

2021-10-06 22:52:59 字數 4590 閱讀 1873

1.es5的類

1.1建構函式

只有屬性

function

person()

var p=

newperson()

console.

log(p.name)

//張三

屬性和方法

function

person()

}var p=

newperson()

p.run

()

1.2在原型鏈上增加屬性和方法
person.prototype.***=

'男'person.prototype.

work

=function()

p.work()

//張三在上班

注意:原型鏈上的屬性會被多個例項共享,建構函式不會。

1.3靜態方法

person.

eat=

function()

// 呼叫

person.

eat(

)//靜態方法eat

注意:靜態方法只能被類呼叫,例項不能呼叫。

1.4類的繼承

1.物件冒充實現繼承

function

web(

)let w=

newweb()

w.run()

//張三在跑步

注意:物件冒充實現繼承不可以繼承原型鏈上的方法或者屬性,靜態方法也不能被繼承

2.原型鏈實現繼承

相當於將乙個person例項掛載到web的原型鏈上,這樣web的例項就具有了與person例項一樣的屬性和方法

function

web(

)web.prototype=

newperson()

let w =

newweb()

w.run()

//張三在跑步

w.work()

//張三在上班

注意:靜態方法還是無法繼承

問題

例項化子類的時候無法給父類傳參

function

person

(name,age)

}person.prototype.***=

'男'person.prototype.

work

=function()

person.

eat=

function()

function

web(

)web.prototype=

newperson()

let w =

newweb

("小李",20

)w.run(

)//undefined在跑步

3.原型鏈+物件冒充繼承

function

person

(name,age)

}person.prototype.***=

'男'person.prototype.

work

=function()

person.

eat=

function()

function

web(name,age)

web.prototype=person.prototype//避免重複繼承建構函式裡的方法和屬性

let w =

newweb

("小李",20

)w.run(

)//小李在跑步

w.work()

//小李在上班

注意:靜態方法無法被繼承

2.ts中的類

2.1宣告

class

person

run():

void

}let p=

newperson

("張三")p.

run(

)//張三

2.2繼承

通過extends實現繼承,子類也可以擴充套件自己的屬性和方法

class

chinese

extends

person

// 擴充套件子類的方法

work()

在上班`)}

}let c=

newchinese

("小李")c.

run(

)//小李在跑步

子類與父類的方法同名時,會覆蓋父類的繼承過來的方法

class

chinese

extends

person

// 擴充套件子類的方法

work()

:void

在上班`)}

// 覆蓋父類的方法

run():

void

}let c=

newchinese

("小李")c.

run(

)//子類run方法

2.3修飾符

ts中的修飾符

修飾符說明

public

(公有)類裡、子類、類外都可訪問

protected

(保護)類裡、子類中可以訪問,類外不能訪問

private

(私有)類裡可以訪問,子類、類外不能訪問

示例1:

//父類

class

person

run():

void

在跑步`

)//類裡訪問}}

//子類

class

chinese

extends

person

// 擴充套件子類的方法

work()

:void

在上班`

)//子類中訪問父類屬性

}// 覆蓋父類的方法

run():

void

}let p =

newperson

("jjj"

)//類外訪問屬性

console.

log(p.name)

//編輯器提示錯誤

let c =

newchinese

("小李"

)//子類中訪問父類屬性

c.work()

//小李在上班

示例2:

class

person

run():

void

在跑步`)}

}class

chinese

extends

person

// 擴充套件子類的方法

work()

:void

在上班`

)//子類中訪問父類屬性。報錯private子類中不能訪問

}// 覆蓋父類的方法

run():

void

}let p =

newperson

("jjj"

)console.

log(p.name)

//報錯,private類外不能訪問

console.

log(p.

run())

//類裡訪問,jjj在跑步

2.4靜態屬性和靜態方法

例項方法:需要先例項化才可以訪問

靜態方法:無需例項化就可以訪問

class person 

static run():void在跑步`)

} }//呼叫靜態方法

person.run()//undefined在跑步

注意:在類的靜態方法中,不能訪問類的普通屬性,只能訪問靜態屬性

2.5抽象類與多型

多型:多型屬於繼承,父類定義乙個公共的方法不去實現,不同的子類通過繼承,去實現這個方法,並使之有不同的表現

abstract class

animal

abstract eat

(food:string)

:void;}

class

dogextends

animal

// 抽象類的子類必須實現抽象類的抽象方法

eat(food:string)吃$

`)}}

class

catextends

animal

eat(food:string)吃$

`)}}

let d=

newdog

("小花");

d.eat

("**"

)//小花吃**

let c =

newcat

("小麗");

c.eat

("老鼠");

//小麗吃老鼠

注意:

ts定義陣列型別 TypeScript 陣列的型別

typescript 陣列的型別 最簡單的方法是使用 型別 方括號 來表示陣列 let fibonacci number 1,1,2,3,5 陣列的項中不允許出現其他的型別 陣列的一些方法的引數也會根據陣列在定義時約定的型別進行限制 let fibonacci number 1,1,2,3,5 fi...

TypeScript學習(三) 類

前篇 typescript學習 二 函式 js中的類可以看之前寫的 new操作符到底幹了什麼。接下來說說typescript中的class。在ts中class的定義方式和es6中的語法糖class很相似。class a run void getname string setname name str...

typescript 六 ts中介面 物件型

如題,接下來我們介紹下,ts中介面的使用。ts中介面,介面是 的一種規範 約束和規定,ts中介面可分為以下幾類 物件型介面 對物件的規範 函式型介面 對函式的規範 可索引 陣列型 介面 對陣列 or物件 的規範 類型別介面 對類的規範 其他介面 泛型介面 繼承介面的介面 等。本篇,我們介紹下物件型介...