2011-07-28 82 views
4

如何爲arg數組中的任意數量的元素實現以下功能?如果它是一個函數,我會use Function.apply(),但我不知道如何使用new運算符。通過ActionScript 3中的數組將參數傳遞給「新」運算符

var arg:Array = [1,2]; 
new MyClass(arg[0], arg[1]); 
+0

你想達到什麼目的?爲什麼不把數組作爲單獨的參數傳遞? – rzetterberg

+0

@Ancide:我有一個數組並希望用這些元素作爲參數實例化一個類,而不會影響代碼其他部分的類型安全性和編譯器檢查。 – Andy

回答

1

如果您設置您的班級接受使用... args的參數列表,您可以隨意傳入。然後在構造函數中,你將像普通數組一樣訪問它們。

class MyClass 
{ 
    public function MyClass(... args):void 
    { 
     //args is an Array containing all the properties sent to the constructor 
     trace(args.length); 
    } 
} 
+1

我希望我可以合併您的答案和Jim的答案。並且更好地解釋這將如何被調用,所以不會有任何誤解,即傳遞一個數組會將其分隔成單獨的參數。 – rzetterberg

+1

是的。安迪,如果你打算只能通過完整的陣列,請與吉姆的回答。如果你打算只傳遞一些元素,或者來自不同數組的元素,這些元素應該被合併到'MyClass'中的單個數組中,請使用我的答案。 – shanethehat

+0

然後,我需要編輯正在其他地方使用的類構造函數。由於這種需求,我不想在這些地方妥協AS3的類型安全。另外,我想要一個可以修改類的解決方案。 – Andy

1

不傳遞數組的每個元素,只是傳遞數組。

var arg:Array = [1,2]; 
new MyClass(arg); 

然後在你的類的內部,遍歷數組。

+0

然後,我需要編輯正在其他地方使用的類構造函數。由於這種需求,我不想在這些地方妥協AS3的類型安全。另外,我想要一個可以修改類的解決方案。 – Andy

+0

您可以重載類構造函數。你可以讓一個接受一個數組,除了一個明確的值列表。 這樣,你可以實現這一點,而不會破壞此構造函數的先前調用。 – Jim

+0

您不能在ActionScript 3.0中重載任何函數 – Allan

1

這是不幸的是不可能的,因爲沒有辦法直接訪問類對象的構造方法。注意:如果你使用一個Function對象來組成你的類(原型繼承),那麼這將是可能的,但我認爲,這不是你的選擇。

你可以解決的問題一點點(醜陋的)輔助方法,可以在其上讀到這裏:http://jacksondunstan.com/articles/398

0

正如評論說是不可能在構造應用設置,但你可以使用此招一類的新實例設置屬性(這應該是公共的)

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

相關問題