簡體   English   中英

Flash AS3:自動從構造函數中的參數向新實例分配屬性

[英]Flash AS3: automate property assignment to new instance from arguments in constructor

我喜歡發現棘手的新做事方法。 假設您有一個帶有屬性的類,該屬性被設置為構造函數中參數的值,如下所示:

package{
 public class SomeClass{
  private var someProperty:*;
  public function SomeClass(_someProperty:*):void{
   someProperty = _someProperty;
  }
 }
}

那不是完全麻煩。 但是想象一下,您有……我不知道,有五個屬性。 也許有十個屬性。 而是逐行寫出每個單獨的賦值,難道沒有辦法循環遍歷構造函數的參數並相應地在新實例上設置每個對應屬性的值嗎? 我不認為...restarguments對象會起作用,因為它們僅保留一個枚舉的參數列表,而不是參數名稱-我認為這樣會更好:

for(var propertyName:String in argsAsAssocArray){this[propertyName] = argsAsAssocArray[propertyName];}

...是否存在這樣的東西?

不,沒有。 這是我使用的:

class A {
    private var arg1:Type1;
    private var arg2:Type2;
    private var arg3:Type3;
    private var arg4:Type4;
    private static const PARAMS:Array = "arg1,arg2,arg3,arg4".split(",");
    public function A(arg1:Type1, arg2:Type2, arg3:Type3, arg4:Type4) {
        var i:uint = 0;
        for each (var name:String in PARAMS) this[name] = arguments[i++];
    }
}

您可能想查看Haxe 與rt3相比,它具有許多優勢,並且使用rtti提供了針對此問題的解決方案,與rt3不同,rtti還包含方法參數名稱。

使用反射類describeType可能會提供有關參數的最有趣的信息,但不幸的是,屬性名稱也不存在。

暫無
暫無

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

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