TypeScript學習(三)—— 類

前篇:TypeScript學習(二)—— 函數es6

js中的類能夠看以前寫的:new操做符到底幹了什麼函數

接下來講說TypeScript中的class。在TS中class的定義方式和es6中的語法糖class很類似。post

定義class

class A {
    name:string //聲明name是string類型,省略了public
    constructor(name:string){
        this.name = name
    }
    run():void {        //定義A.prototype上的run方法
        console.log(this.name)
    }
    getName():string{
        return this.name
    }
    setName(name:string):void{
        this.name = name
    }
}
const a = new A() //沒給默認值不傳參數會報錯
const a = new A('汪汪!') //沒給默認值不傳參數會報錯
a.run() //汪汪!
a.setName('咪咪!')
console.log(a.getName()) //'咪咪'
複製代碼

class的繼承

class Animal {  //定義父類
    name:string
    constructor(name:string){
        this.name = name
    }
    sayName():void{
        console.log(`i am ${this.name}`)
    }
}
class Cat extends Animal{ //定義個繼承父類的子類
    call:string
    constructor(name:string, call:string = 'mimimi!'){  //若是和Animal中構造函數傳入的name類型不一樣就會報錯
        super(name)         //做用是把this傳到父類,調用父類構造函數
        this.call = call
    }
    sayCall():void{
        console.log(`我是${this.name},個人叫聲是:${this.call}`)
    }
}
const cat = new Cat('咪咪', '喵喵')
cat.sayName() //i am 咪咪
cat.sayCall() //我是咪咪,個人叫聲是:喵喵
複製代碼

類裏面的修飾符

public:公有屬性,在類裏面、子類、類外面均可以訪問學習

protected:保護類型,在類裏面、子類裏面能夠訪問,在類外部無法訪問ui

private:私有屬性,在類裏面能夠訪問,子類和類外部沒法訪問this

若是不寫默認爲public。(其實只是代碼檢測會報錯,編譯成es5後均可以訪問獲得)es5

//public
class Animal {
    public name:string
...
    sayName():void{
        console.log(`i am ${this.name}`) //類裏面能夠訪問
    }
}
class Cat extends Animal{
...
    sayCall():void{
        console.log(`我是${this.name},個人叫聲是:${this.call}`) //子類中能夠訪問
    }
}
const animal = new Animal('dog')
console.log(animal.name) //類外面能夠訪問

//protected
class Animal {
    protected name:string
...
    sayName():void{
        console.log(`i am ${this.name}`) //類裏面能夠訪問
    }
}
class Cat extends Animal{
...
    sayCall():void{
        console.log(`我是${this.name},個人叫聲是:${this.call}`) //子類中能夠訪問
    }
}
const animal = new Animal('dog')
console.log(animal.name) //編譯器報錯,類外面訪問不到

//private
class Animal {
    private name:string
...
    sayName():void{
        console.log(`i am ${this.name}`) //類裏面能夠訪問
    }
}
class Cat extends Animal{
...
    sayCall():void{
        console.log(`我是${this.name},個人叫聲是:${this.call}`) //編譯器報錯,子類中訪問不到
    }
}
const animal = new Animal('dog')
console.log(animal.name) //編譯器報錯,類外面訪問不到
複製代碼

類中的靜態屬性和靜態方法

class Animal {
...
    static SF():void{ //定義靜態方法
        console.log(this.SP)
    }
    static SP:string = '我是靜態屬性'  //定義靜態屬性,不建議定義靜態屬性
}
Animal.SF() // =》我是靜態屬性 靜態方法是在類上調用的方法,方法中的this指向Animal自己
console.log(Animal.SP) // =》我是靜態屬性
複製代碼
相關文章
相關標籤/搜索