作者etrexetrex (moonet)
看板Flash
标题[问题] 使用 Class 类别动态建立物件的建构式参数
时间Wed Jun 15 15:57:08 2011
我想要一个物件产生器的类别
目标是以下的程式可以动
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)
2F:→ cjcat2266:construct(Point, [10, 20]) 06/16 09:41
3F:→ cjcat2266:是参考Flint的原始码设计的 06/16 09:41
4F:→ cjcat2266:如果你需要更多constructor parameter,就自行延伸吧 06/16 09:41
5F:→ cjcat2266:但是一个constructor会需要10个参数以上也该重新设计了 06/16 09:42
7F:→ etrexetrex:cool 谢啦 06/16 10:23