从Class对象获得AS3实例方法引用
|
class Foo {
public function bar():void { ... }
}
var clazz:Class = Foo;
// ...enter the function (no Foo literal here)
var fun:Function = clazz[\"bar\"]; // PROBLEM: returns null
// later
fun.call(new Foo(), ...);
做上述事情的正确方法是什么?我要执行的Java等效操作是:
Method m = Foo.class.getMethod(\"bar\", ...);
m.invoke(new Foo(), ...);
实际代码(有解决方法):
class SerClass {
public var className:String;
public var name:String;
private var ser:String = null;
private var unser:Function = null;
public function SerClass(clazz:Class):void {
var type:XML = describeType(clazz);
className = type.@name;
// determine name
name = type.factory.metadata.(@name==\"CompactType\").arg.(@key==\"name\").@value;
// find unserializer
var mdesc:XML = XML(type.method.metadata.(@name==\"Unserialize\")).parent();
if (mdesc is XML) {
unser = clazz[mdesc.@name];
}
// find serializer
var sdesc:XML = XML(type.factory.method.metadata.(@name==\"Serialize\")).parent();
if (sdesc is XML) {
ser = sdesc.@name;
}
}
public function serialize(obj:Object, ous:ByteArray):void {
if (ser == null) throw new Error(name + \" is not serializable\");
obj[ser](ous);
}
public function unserialize(ins:ByteArray):Object {
if (unser == null) throw new Error(name + \" is not unserializable\");
return unser.call(null, ins);
}
}
没有找到相关结果
已邀请:
4 个回复
邪罗逢确胃
如果要直接访问它,则必须使其静态:
现在您可以从类Foo中访问您的函数:
要么
驮帽俺篮号
社攻取墟槽
请改用,因为该函数不需要任何参数
adobe docs指定的第一个参数。 一个对象,用于指定函数体内thisObject的值。 [编辑] 忘记指出您必须使用\“ new \”关键字实例化一个非静态类。
[EDIT2] 好吧,我到处玩耍,以为我得到了你想要的。 基础
抽法
对象。