我有一些代码如下:
private function onComboChange(evt:Event):void {
var temp:Date = df_date.selectedDate;
temp.date += 5;
df_dateDue.selectedDate = new Date(temp);
}
实质上,我试图在df_date中的所选日期添加5天,并将该日期放入df_dateDue。这是通过组合框上的EventListener触发的。 df_date和df_dateDue都是dateFields。
好的,所以我第一次运行它,它运行正常; df_date保持不变,df_dateDue设置为df_date之后的5天。但是,下次我运行它时,df_dateDue从df_date增加10天,下一次增加15,依此类推。
因此,逐步执行代码显示df_date已经以某种方式链接到temp var,并且每次调用函数时temp var都不会重置自身。
示例:df_date = 01 Jan,df_dateDue = 01 Jan。
点火活动,df_date = 01 Jan,df_dateDue = 06 Jan
再次开火。此时,var temp = 06 Jan(即使df_date仍然显示01 Jan),然后df_dateDue设置为1月11日
再次开火。此时var temp = 11 Jan(即使df_date = 01 Jan),然后df_dateDue设置为1月16日
我在这里缺少什么?
答案 0 :(得分:2)
在Flex / AS中,包含对象的变量实际上只是指向某些内存空间的指针。 Flex中的日期是对象,而不是本机类型。这一行:
var temp:Date = df_date.selectedDate;
创建指向现有日期对象的新指针。它不会创建副本。
这一行:
temp.date += 5;
递增dateObject的date属性。指向该日期对象的所有引用都将更新。尝试使用objectUtil.copy
var temp:Date = ObjectUtil.copy(df_date.selectedDate) as Date;
哦,让你的录取率上升。