代码之家  ›  专栏  ›  技术社区  ›  matt lohkamp

FlashAS3:从构造函数中的参数自动为新实例分配属性

  •  0
  • matt lohkamp  · 技术社区  · 15 年前

    我喜欢找出一些棘手的新方法。假设有一个类的属性设置为构造函数中参数的值,如:

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

    这不算麻烦。但想象一下你……我不知道,五个属性。可能有十处房产。不是逐行写出每个单独的赋值,而是有一种方法循环遍历构造函数的参数并相应地在新实例上设置每个对应属性的值吗?我不认为 ...rest arguments 对象可以工作,因为它们只保留参数的枚举列表,而不保留参数名称-我认为这样做会更好:

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

    ……这样的东西存在吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Gama11 zzapper    6 年前

    不,没有。不过我用的是:

    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 . 它比AS3有很多优点,甚至提供了解决这个问题的方法,使用 rtti 与as3 rtti不同,它还包含方法参数名。

        2
  •  0
  •   Theo.T    15 年前

    使用反射类 describeType 可能提供了关于参数的最有趣的信息,但不幸的是,属性名也不在那里。