我有一个自定义课程说 A级:
class A
{
public testA:int;
public testB:int;
}
现在,我有一个对象说对象C ,该对象具有完全相同的变量名称和所有类作为类。
我的问题是我可以将该对象转换为类,反之亦然。而不是设置/获取单个变量。
答案 0 :(得分:1)
你可以尝试反思。请参阅this article。
答案 1 :(得分:0)
不,你不能将Object
转换为Class
,但由于Class
是Object
,你可以采取其他方式,但请记住,从{从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];
}