//class類
class sayWords {
//創(chuàng)建兩個(gè)變量(變量的值必須初始化,若沒有初始化,需要在構(gòu)造函數(shù)中為其賦值)
userName: string;
userSay: string;
//給變量賦值
constructor(userName: string, userSay: string) {
this.userName = userName;
this.userSay = userSay;
}
userActive() {
console.log(`${this.userName}開始說話啦,他說${this.userSay}`)
}
}
//創(chuàng)建對(duì)象并引用(實(shí)例化對(duì)象)
const s1 = new sayWords('tom', 'hello')
//類成員的屬性,都是實(shí)例屬性,即實(shí)例化對(duì)象之后,當(dāng)前實(shí)例對(duì)象中包含所有的類屬性, 類成員方法,都是實(shí)例方法
console.log(s1.userName)
console.log(s1.userSay)
s1.userActive()
和js對(duì)象相比,js對(duì)象需要通過prototype的方式將對(duì)象方法綁定到他的原型上,ts類中函數(shù)直接寫在class當(dāng)中。(寫法上的區(qū)別)
類的繼承extends
//類的繼承
class Dog{
name:string;
static sex:string;
constructor(name:string){
this.name = name
}
run(){
console.log(this.name)
}
}
class Husky extends Dog{
// 父類的構(gòu)造函數(shù)所包含的參數(shù),子類也必須包含,且子類必須含有super
constructor(name:string,age:number){
super(name)
//給屬性賦值必須在super之后
this.age = 2
}
age:number
}
類成員修飾符
public 公共屬性(默認(rèn)修飾符)
private 私有屬性 只能在類的本身被調(diào)用而不能在類的實(shí)例或者類的子類中調(diào)用
protect 保護(hù)屬性 只能在類和其子類中被調(diào)用,不能在類的實(shí)例(new Dog())中被調(diào)用
readonly 只讀屬性 必須給該屬性初始化并且不能更改
static 靜態(tài)屬性 static 靜態(tài)屬性 可以通過類來調(diào)用 Dog.sex,也可以通過子類去調(diào)用Husky.sex
//類的構(gòu)造函數(shù)的屬性,也可以給他添加修飾符
class Animal{
//相當(dāng)于在當(dāng)前類中聲明了一個(gè)公共的name,name就變成了實(shí)例屬性
// name:string;
constructor(public name:string){
}
}
抽象類 abstract(只能被繼承,而不能被實(shí)例化)
可以用來封裝多個(gè)公用的函數(shù),提高代碼的復(fù)用性
abstract class AbCla{
eat(){
console.log('eat')
}
}
class AbChild extends AbCla{
name:string;
constructor(name:string){
super()
this.name = name
}
}
let ab = new AbChild('hah')
ab.eat()