文件结构utils/HashObject.ts文件:先讲解文件结构图__extends方法通过原型对象模拟类继承,用于一些在javascript文件中使用(typescript编译后也会生成这样的方法实现类继承)。_define方法定义对象属性值的精确添加和修改。它的本质是对Object.defineProperty的简单封装。具体参见Object.defineProperty()-MDNIHashObject全局哈希类接口HashObject全局哈希类,所有类都继承该类。AsyncCallback异步函数对象接口,包括onSuccess()和onFail()两个成员方法。$hashCount哈希计数在整个erget源代码中没有找到对__extends()和_define()方法的调用。这两个方法的具体作用是实现原生javascript中的类继承、私有属性等功能。博主写这篇文章的时候erget源码几乎都是用typescript写的,所以这两种方式暂时对源码的分析没有影响。IHashObject接口导出接口IHashObject{hashCode:number;}exportlet$hashCount:number=1;导出类HashObject实现IHashObject{publicconstructor(){this.$hashCode=$hashCount++;}$哈希码:数字;publicgethashCode():number{returnthis.$hashCode;}}这里把hash类的功能分离为抽象接口IHashObject和具体类HashObject。它的作用是支持原生javascript,同时也支持hash函数。这样做的好处是我们可以在typescript声明文件中声明一个javascript变量来实现IHashObject接口,方便javascript和typescript一起写程序。详见声明文件-Typescript中文网。HashObject类导出let$hashCount:number=1;//......exportclassHashObjectimplementsIHashObject{publicconstructor(){this.$hashCode=$hashCount++;}publicgethashCode():number{返回这个。$哈希码;}}这里的作用机制非常简单。首先,初始值为1的变量$hashCount存储哈希类的数量。HashObject的构造函数(constructor())将当前对象的$hashCode属性赋值给$hashCount,使$hashCount自增。因为程序中的所有类都继承基类HashObject并调用其构造函数,所以所有程序中的任何对象都有一个唯一的成员属性$hashCode。这个$hashCode的作用类似于身份证号的唯一标识,在程序的各个模块中都有很大的作用。比如在全局事件系统中,我们不停地创建和销毁事件对象(这些对象很多都是一样的),这时候,我们就需要一个唯一的id来区分这些事件对象。AsyncCallback接口导出接口AsyncCallback{onSuccess:(data:any)=>any;onFail:(error:number,data:any)=>任何;}异步事件回调对象,包括成功回调和失败回调两个成员方法,javascript程序的特点是大量使用了异步任务。通常,异步任务需要一个包含两个回调函数的对象:执行成功和执行失败。任务执行完毕后,相应的函数(onSuccess()或onFail())、AsyncCallback接口为这类全局对象定义了一个标准,使得整个程序的结构更加清晰统一。上一篇:erget源码分析(一):入口文件分析下一篇:erget源码分析(三):生命周期
