[問題] 使用 Class 類別動態建立物件的建構式參數

看板Flash作者 (moonet)時間14年前 (2011/06/15 15:57), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/1
我想要一個物件產生器的類別 目標是以下的程式可以動 var cb:ClassBuilder = new ClassBuilder(Point, [10, 20]); var p:Point = cb.build(); 注意:Point 類別是不可修改的 也就是說我不能透過其他函數去設定建構式函數的初始值 所以我這樣寫 public class ClassBuilder { var c:Class; var p:Array; public function ClassBuilder(c:Class, p:Array) { this.c = c; this.p = p; } public function build():c{ c.這裡要寫什麼 } } 有兩個問題 1.build函數傳回型態問題 我不能限制 build 傳回型態是 c 不過這不要緊 可以傳回Object再轉型 或是用* 2.建構式參數傳遞問題 因為我的參數 p 是陣列 如果建構式是一個 Function 類別的函數 那麼我就可以用 var f:Function = c的建構式; var o:Object = f.apply(null, p); 的方式去傳建構式參數 == 嘗試 1 == 我嘗試了以下這行程式 var f:Function = Function(c); 結果得到錯誤訊息 [Fault] exception, information=EvalError: Error #1066: 不支援表單 function('function body')。 == 嘗試 2 == 如果直接寫 c.apply(null, p); 會得到沒有 apply 這個方法 我沒梗了 這問題有解嗎? -- blog:http://etrex.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.137.198.18 ※ 編輯: etrexetrex 來自: 140.137.198.18 (06/15 16:00)

06/16 09:41, , 1F
這是我在Stardust的做法 http://bitly.com/lyvaWZ
06/16 09:41, 1F

06/16 09:41, , 2F
construct(Point, [10, 20])
06/16 09:41, 2F

06/16 09:41, , 3F
是參考Flint的原始碼設計的
06/16 09:41, 3F

06/16 09:41, , 4F
如果你需要更多constructor parameter,就自行延伸吧
06/16 09:41, 4F

06/16 09:42, , 5F
但是一個constructor會需要10個參數以上也該重新設計了
06/16 09:42, 5F

06/16 09:43, , 6F
啊,給錯URL了,這個才對 http://bit.ly/jbKB5X
06/16 09:43, 6F

06/16 10:23, , 7F
cool 謝啦
06/16 10:23, 7F
文章代碼(AID): #1D-6NOmy (Flash)
文章代碼(AID): #1D-6NOmy (Flash)