我基本上尝试的是在实例化类之后动态地在类中创建函数...我真的不知道是否可以在as3中实现这一点......这里有一些例子:
var mc:SomeClass = new SomeClass();
mc["myMethod"] = function():void {};
或
public function SomeClass()
{
}
public function addMethod(methName:String, func:Function):void
{
pushMeth(func);
this[methName] = getMeth();
}
两个例子都是一样的......
mc["myMethod"] = function():void {};
或
this[methName] = getMeth();
抛出:
ReferenceError:错误#1056:无法在SomeClass上创建属性myMethod
所以你能给我任何建议如何实现这个或我的代码中有什么问题,或者我能达到这个效果吗?
EDIT !!!
@null的全部工作代码
public dynamic class OverloadExample
{
private var _meths:Object = {};
public function OverloadExample()
{
}
public function addMethod(methName:String, func:Function):void
{
pushMeth(func);
this[methName] = getMeth;
}
private function pushMeth(func:Function):void
{
_meths[func.length] = func;
}
private function getMeth(...args):void
{
var l:int = args.length;
if (_meths[l]) {
_meths[l].apply(this,args);
}
}
}
var o:OverloadExample = new OverloadExample();
o.addMethod("mm", function(a:int):void { trace("one"); } );
o.addMethod("mm", function(a:int,b:int):void { trace("two"); } );
o.mm(1);
o.mm(2,3);
注意:这只是如何实现过载效果的一个例子...
现在我试图能够使用相同数量的参数添加两个或更多函数,但这个参数可以是不同的类型,我有一些改进......
答案 0 :(得分:1)
SomeClass
应该是动态的。
public dynamic class SomeClass {
动态类定义了一个可以在运行时更改的对象 添加或更改属性和方法。
答案 1 :(得分:0)
您可以创建一个包含Function
的属性。
公共类SomeClass {
private var functions:Object = {};
public function SomeClass()
{
}
public function addFunction(name:String, function:Function):void
{
functions[name] = function;
}
}
这样做的好处是您不必创建类dynamic
,这是非常不受欢迎的,因为在编译时很难对动态类进行错误检查。
你仍然应该进行合理性检查。
将此与EventDispatcher
类进行比较,该类允许您在不dynamic
的情况下为其添加“方法”。