在类中动态创建函数as3

时间:2015-05-17 10:56:37

标签: actionscript-3

我基本上尝试的是在实例化类之后动态地在类中创建函数...我真的不知道是否可以在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);


注意:这只是如何实现过载效果的一个例子...
现在我试图能够使用相同数量的参数添加两个或更多函数,但这个参数可以是不同的类型,我有一些改进......

2 个答案:

答案 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的情况下为其添加“方法”。