成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

erget源碼分析(2):全局哈?;?lèi)和全局異步函數(shù)對(duì)象接口

godlong_X / 2599人閱讀

摘要:異步函數(shù)對(duì)象接口,包含和兩個(gè)成員方法。哈希計(jì)數(shù)在整個(gè)的源碼中都沒(méi)有找到和方法的調(diào)用,這兩個(gè)方法的具體作用是在原生中實(shí)現(xiàn)類(lèi)式繼承和私有屬性一類(lèi)的功能。

文件結(jié)構(gòu)

utils/HashObject.ts文件:

首先解釋一下文件結(jié)構(gòu)圖

__extends方法 通過(guò)原型對(duì)象模擬類(lèi)式繼承,用在一些javascript文件中使用(typescript編譯后也生成一個(gè)這樣的方法實(shí)現(xiàn)類(lèi)式繼承)。

_define方法 定義精確地添加和修改對(duì)象的屬性值,其實(shí)質(zhì)是對(duì)

Object.defineProperty的一個(gè)簡(jiǎn)單的封裝,具體參考Object.defineProperty()-MDN

IHashObject 全局哈希類(lèi)接口

HashObject 全局哈希類(lèi),所有的類(lèi)繼承這個(gè)類(lèi)。

AsyncCallback 異步函數(shù)對(duì)象接口,包含onSuccess()和onFail()兩個(gè)成員方法。

$hashCount 哈希計(jì)數(shù)

在整個(gè)erget的源碼中都沒(méi)有找到__extends()和_define()方法的調(diào)用,這兩個(gè)方法的具體作用是在原生javascript中實(shí)現(xiàn)類(lèi)式繼承和私有屬性一類(lèi)的功能。博主撰寫(xiě)本文時(shí)erget源碼幾乎都是使用了typescript來(lái)編寫(xiě),所以這兩個(gè)方法在源碼的分析中暫時(shí)沒(méi)有作用。

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;
        }
    }

這里哈希類(lèi)的功能分離成了IHashObject這個(gè)抽象接口和HashObject這個(gè)具體的類(lèi),它的作用是為了支持原生的javascript也支持哈希功能。這樣做的好處是,我們可以在typescript的聲明文件中聲明某個(gè)javascript變量實(shí)現(xiàn)了IHashObject接口,方便javascript和typescript混合編寫(xiě)程序,具體參考聲明文件-Typescript中文網(wǎng)。

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

這里的作用機(jī)理非常的簡(jiǎn)單,首先是一個(gè)$hashCount這個(gè)初始值為1的變量?jī)?chǔ)存哈希類(lèi)的數(shù)量,HashObject的構(gòu)造函數(shù)(constructor())將當(dāng)前對(duì)象的$hashCode屬性賦值為$hashCount,并使$hashCount自增.因?yàn)槌绦蛑兴械念?lèi)都繼承HashObject這個(gè)基類(lèi)并且調(diào)用它的構(gòu)造函數(shù),所有程序中任何一個(gè)對(duì)象都有唯一的成員屬性$hashCode。這個(gè)$hashCode的作用類(lèi)似于身份證號(hào)碼一樣的唯一標(biāo)識(shí),在程序的各個(gè)模塊中都有很大的作用。比如在全局事件系統(tǒng)中,我們不停地創(chuàng)建和銷(xiāo)毀事件對(duì)象(這些對(duì)象有很多是相同的),這時(shí)候就需要一個(gè)唯一的id標(biāo)識(shí)來(lái)區(qū)分這些事件對(duì)象。

AsyncCallback接口
    export interface AsyncCallback {

        onSuccess: (data:any) => any;

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

    }

異步事件回調(diào)對(duì)象,包含成功回調(diào)和失敗回調(diào)兩個(gè)成員方法,javascript程序的特點(diǎn)就是大量地使用異步任務(wù),一般異步任務(wù)需要一個(gè)包含執(zhí)行成功和執(zhí)行失敗這兩個(gè)回調(diào)函數(shù)的對(duì)象,在任務(wù)執(zhí)行完畢后去調(diào)用對(duì)應(yīng)的函數(shù)(onSuccess()或者onFail()),AsyncCallback接口為全局的這一類(lèi)對(duì)象定義一個(gè)標(biāo)準(zhǔn),使得整個(gè)程序的架構(gòu)更清晰和統(tǒng)一。
上一篇:erget源碼分析(1):入口文件分析
下一篇:erget源碼分析(3):生命周期

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92764.html

相關(guān)文章

  • erget源碼分析(1):入口文件分析

    摘要:是一個(gè)靜態(tài)類(lèi),調(diào)用方法來(lái)初始化各項(xiàng)支持信息。小結(jié)通過(guò)和這兩個(gè)靜態(tài)類(lèi)初始化了項(xiàng)目運(yùn)行的環(huán)境參數(shù),然后創(chuàng)建了屏幕適配器根據(jù)不同的適配策略調(diào)整。下一篇源碼分析全局哈?;?lèi)和全局異步函數(shù)對(duì)象接口 egret的github地址是https://github.com/egret-labs...,大家自己git clone到本地。 一.路口html文件 用ergetWing新建一個(gè)工程,打開(kāi)根目錄下...

    Rainie 評(píng)論0 收藏0
  • erget源碼分析(3):生命周期

    摘要:概述下面我們來(lái)分析一下中的生命周期。定義了監(jiān)聽(tīng)生命周期的類(lèi),這個(gè)三個(gè)成員方法分別執(zhí)行暫停繼續(xù)和刷新。方法作為橋梁,接收到具體的類(lèi)型的函數(shù),創(chuàng)建的一個(gè)實(shí)例作為參數(shù)調(diào)用它。函數(shù)做了兩件事情暫停應(yīng)用程序,暫停背景音樂(lè)和音效的播放。 概述 下面我們來(lái)分析一下erget中的生命周期。 src/egret/player/SystemTicker.ts: export namespace li...

    Hydrogen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<