• hprose.ClassManager
    • register 方法
    • getClassAlias 方法
    • getClass 方法

    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');