我有一些代码如下:
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 中。这通过组合框上的事件监听器触发。 df_date 和 df_dateDue 都是日期字段。
好的,所以我第一次运行这个时,效果很好; df_date 保持不变,df_dateDue 设置为 df_date 过去 5 天。但是,下次运行它时,df_dateDue 从 df_date 开始增加 10 天,下一次增加 15 天,依此类推。
因此,单步执行代码表明 df_date 已以某种方式链接到临时变量,并且临时变量不会在每次调用函数时重置自身。
示例:df_date = 1 月 1 日,df_dateDue = 1 月 1 日。
触发事件,df_date = 01 Jan,df_dateDue = 06 Jan
再次触发事件。此时,var temp = 06 Jan(尽管 df_date 仍显示 01 Jan),然后 df_dateDue 设置为 11 Jan
再次触发事件。此时 var temp = 11 Jan(即使 df_date = 01 Jan),然后 df_dateDue 设置为 16 Jan
我在这里缺少什么?
在 Flex/AS 中,包含对象的变量实际上只是指向某些内存空间的指针。 Flex 中的日期是对象,而不是本机类型。这一行:
var temp:Date = df_date.selectedDate;
创建指向现有日期对象的新指针。它不会创建副本。
这一行:
temp.date += 5;
增加 dateObject 的日期属性。所有指向该日期对象的引用都将被更新。尝试使用 objectUtil.copy
var temp:Date = ObjectUtil.copy(df_date.selectedDate) as Date;