摘要:異步函數(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
摘要:是一個(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)根目錄下...
摘要:概述下面我們來(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...
閱讀 1166·2023-04-25 17:28
閱讀 3617·2021-10-14 09:43
閱讀 3978·2021-10-09 10:02
閱讀 1951·2019-08-30 14:04
閱讀 3142·2019-08-30 13:09
閱讀 3280·2019-08-30 12:53
閱讀 2907·2019-08-29 17:11
閱讀 1833·2019-08-29 16:58