资讯专栏INFORMATION COLUMN

erget源码分析(2):全局哈希基类和全局异步函数对象接口

PrototypeZ / 2111人阅读

摘要:异步函数对象接口,包含和两个成员方法。哈希计数在整个的源码中都没有找到和方法的调用,这两个方法的具体作用是在原生中实现类式继承和私有属性一类的功能。

文件结构

utils/HashObject.ts文件:

首先解释一下文件结构图

__extends方法 通过原型对象模拟类式继承,用在一些javascript文件中使用(typescript编译后也生成一个这样的方法实现类式继承)。

_define方法 定义精确地添加和修改对象的属性值,其实质是对

Object.defineProperty的一个简单的封装,具体参考Object.defineProperty()-MDN

IHashObject 全局哈希类接口

HashObject 全局哈希类,所有的类继承这个类。

AsyncCallback 异步函数对象接口,包含onSuccess()和onFail()两个成员方法。

$hashCount 哈希计数

在整个erget的源码中都没有找到__extends()和_define()方法的调用,这两个方法的具体作用是在原生javascript中实现类式继承和私有属性一类的功能。博主撰写本文时erget源码几乎都是使用了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中文网。

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):生命周期

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/57154.html

相关文章

  • erget源码分析(2):全局希基类和全局异步函数对象接口

    摘要:异步函数对象接口,包含和两个成员方法。哈希计数在整个的源码中都没有找到和方法的调用,这两个方法的具体作用是在原生中实现类式继承和私有属性一类的功能。 文件结构 utils/HashObject.ts文件:showImg(https://segmentfault.com/img/bVZpuq?w=642&h=472); 首先解释一下文件结构图 __extends方法 通过原型对象模拟类...

    godlong_X 评论0 收藏0
  • erget源码分析(1):入口文件分析

    摘要:是一个静态类,调用方法来初始化各项支持信息。小结通过和这两个静态类初始化了项目运行的环境参数,然后创建了屏幕适配器根据不同的适配策略调整。下一篇源码分析全局哈希基类和全局异步函数对象接口 egret的github地址是https://github.com/egret-labs...,大家自己git clone到本地。 一.路口html文件 用ergetWing新建一个工程,打开根目录下...

    Rainie 评论0 收藏0
  • erget源码分析(1):入口文件分析

    摘要:是一个静态类,调用方法来初始化各项支持信息。小结通过和这两个静态类初始化了项目运行的环境参数,然后创建了屏幕适配器根据不同的适配策略调整。下一篇源码分析全局哈希基类和全局异步函数对象接口 egret的github地址是https://github.com/egret-labs...,大家自己git clone到本地。 一.路口html文件 用ergetWing新建一个工程,打开根目录下...

    impig33 评论0 收藏0
  • erget源码分析(3):生命周期

    摘要:概述下面我们来分析一下中的生命周期。定义了监听生命周期的类,这个三个成员方法分别执行暂停继续和刷新。方法作为桥梁,接收到具体的类型的函数,创建的一个实例作为参数调用它。函数做了两件事情暂停应用程序,暂停背景音乐和音效的播放。 概述 下面我们来分析一下erget中的生命周期。 src/egret/player/SystemTicker.ts: export namespace li...

    MartinHan 评论0 收藏0
  • erget源码分析(3):生命周期

    摘要:概述下面我们来分析一下中的生命周期。定义了监听生命周期的类,这个三个成员方法分别执行暂停继续和刷新。方法作为桥梁,接收到具体的类型的函数,创建的一个实例作为参数调用它。函数做了两件事情暂停应用程序,暂停背景音乐和音效的播放。 概述 下面我们来分析一下erget中的生命周期。 src/egret/player/SystemTicker.ts: export namespace li...

    Hydrogen 评论0 收藏0

发表评论

0条评论

PrototypeZ

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<