TypeScript 面向對象編程

面向對象編程-類的聲明和使用

類的出現可讓前端程序員抽象層次、增長維護性和複用性。固然這一系列的類的操做,咱們都叫他面向對象編程。TypeScript就是一個基於類的面向對象編程語言。javascript

類是對象具體事務的一個抽象,對象是類的具體表現。html

// 類規範,首寫字母大寫 - 大駝峯命名
class XiaoJieJie{
// 區別於對象,不須要使用逗號隔開
name: string
age: number
// 構造函數
// 構造函數的主要做用是給類中封裝的屬性進行賦值
constructor(name:string, age:number){
// 使用 this 賦值
this.name = name
this.age = age
}
say(){
console.log('NIHAOA!')
}
}
// 有類以後聲明對象
let jiejie:XiaoJieJie = new XiaoJieJie('fanbingbing',18)
// 打印出生成的對象看下樣子
console.log(jiejie)
// 調用類方法
jiejie.say()  

使用和定義類其實很簡單,關鍵是理解類的思想。要有抽象邏輯的能力,這樣才能複用和加強維護性。前端

面向對象編程-修飾符

訪問修飾符

  • public:公有修飾符,能夠在類內或者類外使用public修飾的屬性或者行爲,默認修飾符。
  • protected:受保護的修飾符,能夠本類和子類中使用protected修飾的屬性和行爲。
  • private : 私有修飾符,只能夠在類內使用private修飾的屬性和行爲。
class XiaoJieJie{
    public sex:string
    protected name:string
    private age:number
    public constructor(sex:string, name:string, age:number){
        this.sex = sex
        this.name = name
        this.age = age
    }
    public sayHello(){
        console.log('HELLO')
    }
    protected sayLove(){
        console.log('ILOVEYOU')
    }
}

var jiejie:XiaoJieJie = new XiaoJieJie('nv', 'DLLB', 16)

// 打印出對象屬性看效果
console.log(jiejie.sex)
// 報錯:屬性「name」受保護,只能在類「XiaoJieJie」及其子類中訪問
console.log(jiejie.name)
// 報錯:屬性「age」爲私有屬性,只能在類「XiaoJieJie」中訪問
console.log(jiejie.age)
// 調用方法
jiejie.sayHello()
// 報錯:屬性「age」爲私有屬性,只能在類「XiaoJieJie」中訪問
jiejie.sayLove()

只讀屬性修飾符

使用readonly修飾符將屬性設置爲只讀,只讀屬性必須在生命時或者構造函數裏被初始化(注意)。java

class Man{
    public readonly sex:string = 'nan'
}

var man:Man = new Man()
// 報錯:沒法分配到「sex」,由於它是常數或只讀屬性
man.sex = 'nv'

面向對象編程-繼承和重寫

類的繼承

繼承:容許咱們建立一個類(子類),從已有的類(父類)上繼承全部的屬性和方法,子類能夠新建父類中沒有的屬性和方法。程序員

// 父類
class Nloong{
    public name:string
    public age:number
    public skill:string
    constructor(name:string, age:number, skill:string){
        this.name = name
        this.age = age
        this.skill = skill
    }
    public interest(){
        console.log('zhaonimei')
    }
}

let loongObj:Nloong = new Nloong('baiye', 18, 'coding')
// 測試父類方法
loongObj.interest()

// 子類繼承父類屬性和方法 extends
// 可是有一點須要咱們注意,TypeScript不支持多重繼承。
class Xloong extends Nloong{
    // 子類擴展自身的屬性和方法
    public xingxiang:string = 'shuaiqi'
    public zhuangQian(){
        console.log('yitianyigeyi')
    }
}

let shuai = new Xloong('shuai', 5, 'daren')

// 子類能使用父類的方法,經過繼承而來
shuai.interest()
// 子類能使用父類找中沒有自身擴展的方法
shuai.zhuangQian()

類方法的重寫

// 父類
class Nloong{
    public name:string
    public age:number
    public skill:string
    constructor(name:string, age:number, skill:string){
        this.name = name
        this.age = age
        this.skill = skill
    }
    public interest(){
        console.log('zhaonimei')
    }
}

let loongObj:Nloong = new Nloong('baiye', 18, 'coding')

loongObj.interest()

// 子類
class Xloong extends Nloong{
    public xingxiang:string = 'shuaiqi'

    // 重寫
    public interest(){
        // super 在子類中調用父類的方法,實現重寫時保存父類的方法
        super.interest()
        console.log('chuangjianGS')
    }
    
    public zhuangQian(){
        console.log('yitianyigeyi')
    }
}

let shuai = new Xloong('shuai', 5, 'daren')

shuai.interest()

shuai.zhuangQian()

面向對象編程-接口

認識接口

// 接口
interface Husband{
    sex:string
    interset:string
    // 接口可選參數添加問號
    maiBaoBao?:Boolean
}

let myhusband:Husband = {sex: 'nan', interset: 'kanshu'}

console.log(myhusband)

面向對象編程-命名空間

命名空間的使用

Dehua 是同名類,可使用不一樣的命名空間區分使用typescript

// 命名空間
namespace shuaiGe{
    // export 暴露出去
    export class Dehua{
        public name:string = 'liudehua'
        talk(){
            console.log('woshishuaigeliudehua')
        }
    }
}

namespace bdjie{
    export class Dehua{
        public name:string = 'madehua'
        talk(){
            console.log('woshiershixiongmadehua')
        }
    }
}

let dehua1:shuaiGe.Dehua = new shuaiGe.Dehua()
let dehua2:bdjie.Dehua = new bdjie.Dehua()

dehua1.talk()
dehua2.talk()

原文地址:http://jspang.com/post/typescript.html?tdsourcetag=s_pcqq_aiomsg編程

相關文章
相關標籤/搜索