如何为arg
数组中的任意数量的元素实现以下功能?如果它是一个函数,我会use Function.apply(),但我不知道如何使用new
运算符。通过ActionScript 3中的数组将参数传递给“新”运算符
var arg:Array = [1,2];
new MyClass(arg[0], arg[1]);
如何为arg
数组中的任意数量的元素实现以下功能?如果它是一个函数,我会use Function.apply(),但我不知道如何使用new
运算符。通过ActionScript 3中的数组将参数传递给“新”运算符
var arg:Array = [1,2];
new MyClass(arg[0], arg[1]);
如果您设置您的班级接受使用... args
的参数列表,您可以随意传入。然后在构造函数中,你将像普通数组一样访问它们。
class MyClass
{
public function MyClass(... args):void
{
//args is an Array containing all the properties sent to the constructor
trace(args.length);
}
}
我希望我可以合并您的答案和Jim的答案。并且更好地解释这将如何被调用,所以不会有任何误解,即传递一个数组会将其分隔成单独的参数。 – rzetterberg
是的。安迪,如果你打算只能通过完整的阵列,请与吉姆的回答。如果你打算只传递一些元素,或者来自不同数组的元素,这些元素应该被合并到'MyClass'中的单个数组中,请使用我的答案。 – shanethehat
然后,我需要编辑正在其他地方使用的类构造函数。由于这种需求,我不想在这些地方妥协AS3的类型安全。另外,我想要一个可以修改类的解决方案。 – Andy
这是不幸的是不可能的,因为没有办法直接访问类对象的构造方法。注意:如果你使用一个Function对象来组成你的类(原型继承),那么这将是可能的,但我认为,这不是你的选择。
你可以解决的问题一点点(丑陋的)辅助方法,可以在其上读到这里:http://jacksondunstan.com/articles/398
正如评论说是不可能在构造应用设置,但你可以使用此招一类的新实例设置属性(这应该是公共的)
public function setProps(o:Object, props:Object):* {
for (var n:String in props) {
o[n] = props[n];
}
return o;
}
..这样使用它
var args:Object = {x:1, y:2};
var instance:MyClass = setProps(new MyClass(), args));
来源:
http://gskinner.com/blog/archives/2010/05/quick_way_to_se.html
你想达到什么目的?为什么不把数组作为单独的参数传递? – rzetterberg
@Ancide:我有一个数组并希望用这些元素作为参数实例化一个类,而不会影响代码其他部分的类型安全性和编译器检查。 – Andy