文件结构
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):生命周期
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。