如何爲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