我可以将类视为对象类型吗?

时间:2010-09-08 10:20:19

标签: actionscript-3 oop actionscript

我有一个自定义课程说 A级

class A
{
     public testA:int;
     public testB:int;

}

现在,我有一个对象说对象C ,该对象具有完全相同的变量名称和所有类作为类。

我的问题是我可以将该对象转换为类,反之亦然。而不是设置/获取单个变量。

3 个答案:

答案 0 :(得分:1)

你可以尝试反思。请参阅this article

答案 1 :(得分:0)

不,你不能将Object转换为Class,但由于ClassObject,你可以采取其他方式,但请记住,从{从Class访问成员时,Object的速度更快。

要将Object转换为Class,您必须实例化Class,然后将每个Object字段复制到Class。但要注意它们不是同一个实例,而是副本。

要反过来,您必须使用Class上的describeType来枚举该Class的所有公共字段,然后将该值复制到新的Object }。

// simple sample:
class A {
 public var testA:int;
 public var testB:int;
}

function Object2A(o:Object):A {
 var ret:A = new A();
 for (var fieldName:String in o) {
   if (ret.hasOwnProperty(fieldName)) {
    ret[fieldName] = o[fieldName];
   }
 }
 return ret;
}

import flash.utils.describeType;

function A2Object(a:A):Object {
 var ret:Object = {};
 var fields:XMLList=describeType(a).variable;
 for each(var field:XML in fields) {
  var fieldName:String=field.@name.toString();
  ret[fieldName]=a[fieldName];
 }
 return ret;
}

var o:Object = {testA:12, testB:13};

var a:A = Object2A(o); // copy from object into class

o=A2Object(a); // copy from class into object

答案 2 :(得分:0)

不幸的是,没有。鸭子打字的规则(如果它看起来像鸭子和像鸭子一样呱呱叫,那么它必须是鸭子)不适用于AS3。除非将对象显式构造为类型A,否则与具有相同属性的通用对象相比,分类测试将失败。要将泛型转换为类型化对象,我总是这样做:

var obj = ((your generic object))
var a:A = new A();

for (var prop in obj) {
   if (a.hasOwnProperty(prop)) a[prop] = obj[prop];
}