標籤:存取修飾詞 構造 建構函式 程式員 這一 this 空間 預設 必須
物件導向編程-類的聲明和使用
類的出現可以讓前端程式員抽象層次、增加維護性和複用性。當然這一系列的類的操作,我們都叫他物件導向編程。TypeScript就是一個基於類的物件導向程式設計語言。
類是對象具體事務的一個抽象,對象是類的具體表現。
// 類規範,首寫字母大寫 - 大駝峰命名class XiaoJieJie{// 區別於對象,不需要使用逗號隔開name: stringage: number// 建構函式// 建構函式的主要作用是給類中封裝的屬性進行賦值constructor(name:string, age:number){// 使用 this 賦值this.name = namethis.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修飾符將屬性設定為唯讀,唯讀屬性必須在生命時或者建構函式裡被初始化(注意)。
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 是同名類,可以使用不同的命名空間區分使用
// 命名空間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
TypeScript 物件導向編程