hprose.ClassManager

register 方法

  1. hprose.ClassManager.register(class, alias);

在 javascript 中,是没有类的概念的,这里的类是指对象的构造器函数。

当 hprose 序列化对象时,需要知道对象的类名,但有时候,对象的构造器函数可能是个匿名函数,并没有函数名。或者我们在不同的语言中定义的类名可能不同,但结构相同或相近,我们希望这些定义不同的类的对象可以相互传递。那么就需要使用该方法来进行注册,注册成统一的别名之后,就可以相互传递了。

其中 class 表示要注册的类(对象的构造器函数),alias 表示注册的别名。例如:

  1. var User = function() {
  2. this.name = 'Tom';
  3. this.age = 18;
  4. }
  5.  
  6. hprose.ClassManager.register(User, 'User');

在有些语言中,类名是有名称空间(NameSpace)的,例如在 java 中,可能有这样一个类:my.package.User,我们希望它能跟这里的 User 进行交互,那我们应该这样做:

  1. hprose.ClassManager.register(User, 'my_package_User');

注意上面的别名中,不是使用 . 做分隔符的,而是使用 ,hprose 之所以这样做是因为有些语言不支持名称空间(NameSpace),还有些语言的名称空间(NameSpace)和类名之间不是使用 . 分隔符的,因此这里统一成 ,这样既可以支持没有名称空间(NameSpace)的语言,也可以支持具有名称空间(NameSpace)的语言。

因为该方法比较常用,所以 hprose 还提供了一个简单的写法:

  1. hprose.register(User, 'my_package_User');

getClassAlias 方法

  1. hprose.ClassManager.getClassAlias(class);

通过类来查找别名,例如:

  1. hprose.register(User, 'my_package_User');
  2. console.log(hprose.ClassManager.getClassAlias(User));

输出结果为:


  1. my_package_User

getClass 方法

  1. hprose.ClassManager.getClass(alias);

通过别名来查找注册的类。例如:

  1. var User = hprose.ClassManager.getClass('my_package_User');