- hprose.ClassManager
- register 方法
- getClassAlias 方法
- getClass 方法
hprose.ClassManager
register 方法
- hprose.ClassManager.register(class, alias);
在 javascript 中,是没有类的概念的,这里的类是指对象的构造器函数。
当 hprose 序列化对象时,需要知道对象的类名,但有时候,对象的构造器函数可能是个匿名函数,并没有函数名。或者我们在不同的语言中定义的类名可能不同,但结构相同或相近,我们希望这些定义不同的类的对象可以相互传递。那么就需要使用该方法来进行注册,注册成统一的别名之后,就可以相互传递了。
其中 class
表示要注册的类(对象的构造器函数),alias
表示注册的别名。例如:
- var User = function() {
- this.name = 'Tom';
- this.age = 18;
- }
- hprose.ClassManager.register(User, 'User');
在有些语言中,类名是有名称空间(NameSpace)的,例如在 java 中,可能有这样一个类:my.package.User,我们希望它能跟这里的 User 进行交互,那我们应该这样做:
- hprose.ClassManager.register(User, 'my_package_User');
注意上面的别名中,不是使用 .
做分隔符的,而是使用 ,hprose 之所以这样做是因为有些语言不支持名称空间(NameSpace),还有些语言的名称空间(NameSpace)和类名之间不是使用
.
分隔符的,因此这里统一成 ,这样既可以支持没有名称空间(NameSpace)的语言,也可以支持具有名称空间(NameSpace)的语言。
因为该方法比较常用,所以 hprose 还提供了一个简单的写法:
- hprose.register(User, 'my_package_User');
getClassAlias 方法
- hprose.ClassManager.getClassAlias(class);
通过类来查找别名,例如:
- hprose.register(User, 'my_package_User');
- console.log(hprose.ClassManager.getClassAlias(User));
输出结果为:
my_package_User
getClass 方法
- hprose.ClassManager.getClass(alias);
通过别名来查找注册的类。例如:
- var User = hprose.ClassManager.getClass('my_package_User');