簡體   English   中英

在類as3中動態創建函數

[英]Dynamically create function in class as3

我基本上想做的是在實例化類后在類中動態創建函數...我真的不知道是否有可能在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

因此,您能否給出任何建議,如何實現此目標,或者代碼中存在什么問題,或者完全可以實現此效果?

編輯!!!
@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);


注意:這僅是如何實現過載效果的示例...
現在,我試圖使用相同數量的參數來添加兩個或多個函數,但是此參數可以是不同的類型,並且我有一些改進...

SomeClass應該是動態的。

public dynamic class SomeClass {

動態類定義了一個可以在運行時通過添加或更改屬性和方法來更改的對象。

您可以創建一個包含Function的屬性。 公共類SomeClass {

private var functions:Object = {};

public function SomeClass()
{
}

public function addFunction(name:String, function:Function):void
{
    functions[name] = function;
}

}

這樣做的好處是不必使類成為dynamic類,這是非常不希望的,因為動態類在編譯時很難進行錯誤檢查。

您仍然應該進行真實性檢查。

將此與EventDispatcher類進行比較,該類使您無需dynamic就可以向其添加“方法”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM