erget源碼分析(2):全局哈希基類和全局異步函數對象接口

文件結構

utils/HashObject.ts文件:
clipboard.pngjavascript

首先解釋一下文件結構圖java

  • __extends方法 經過原型對象模擬類式繼承,用在一些javascript文件中使用(typescript編譯後也生成一個這樣的方法實現類式繼承)。
  • _define方法 定義精確地添加和修改對象的屬性值,其實質是對
  • Object.defineProperty的一個簡單的封裝,具體參考Object.defineProperty()-MDN
  • IHashObject 全局哈希類接口
  • HashObject 全局哈希類,全部的類繼承這個類。
  • AsyncCallback 異步函數對象接口,包含onSuccess()和onFail()兩個成員方法。
  • $hashCount 哈希計數

在整個erget的源碼中都沒有找到__extends()和_define()方法的調用,這兩個方法的具體做用是在原生javascript中實現類式繼承和私有屬性一類的功能。博主撰寫本文時erget源碼幾乎都是使用了typescript來編寫,因此這兩個方法在源碼的分析中暫時沒有做用。typescript

IHashObject接口

export interface IHashObject {
        hashCode:number;
    }
    export let $hashCount:number = 1;
    export class HashObject implements IHashObject{
        public constructor() {
            this.$hashCode = $hashCount++;
        }
        $hashCode:number;
        public get hashCode():number {
            return this.$hashCode;
        }
    }

這裏哈希類的功能分離成了IHashObject這個抽象接口和HashObject這個具體的類,它的做用是爲了支持原生的javascript也支持哈希功能。這樣作的好處是,咱們能夠在typescript的聲明文件中聲明某個javascript變量實現了IHashObject接口,方便javascript和typescript混合編寫程序,具體參考聲明文件-Typescript中文網segmentfault

HashObject類

export let $hashCount:number = 1;
    //......
    export class HashObject implements IHashObject{
        public constructor() {
            this.$hashCode = $hashCount++;
        }
        public get hashCode():number {
            return this.$hashCode;
        }
    }

這裏的做用機理很是的簡單,首先是一個$hashCount這個初始值爲1的變量儲存哈希類的數量,HashObject的構造函數(constructor())將當前對象的$hashCode屬性賦值爲$hashCount,並使$hashCount自增.由於程序中全部的類都繼承HashObject這個基類而且調用它的構造函數,全部程序中任何一個對象都有惟一的成員屬性$hashCode。這個$hashCode的做用相似於身份證號碼同樣的惟一標識,在程序的各個模塊中都有很大的做用。好比在全局事件系統中,咱們不停地建立和銷燬事件對象(這些對象有不少是相同的),這時候就須要一個惟一的id標識來區分這些事件對象。架構

AsyncCallback接口

export interface AsyncCallback {

        onSuccess: (data:any) => any;

        onFail: (error:number,data:any) => any;

    }

異步事件回調對象,包含成功回調和失敗回調兩個成員方法,javascript程序的特色就是大量地使用異步任務,通常異步任務須要一個包含執行成功和執行失敗這兩個回調函數的對象,在任務執行完畢後去調用對應的函數(onSuccess()或者onFail()),AsyncCallback接口爲全局的這一類對象定義一個標準,使得整個程序的架構更清晰和統一。
上一篇:erget源碼分析(1):入口文件分析
下一篇:erget源碼分析(3):生命週期異步

相關文章
相關標籤/搜索