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物件 的規範 類型別介面 對類的規範 其他介面 泛型介面 繼承介面的介面 等。本篇,我們介紹下物件型介...