0

我有一些代码如下:

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 = 1 月 1 日,df_dateDue = 1 月 1 日。

  1. 触发事件,df_date = 1 月 1 日,df_dateDue = 1 月 6 日

  2. 再次触发事件。此时,var temp = 06 Jan(尽管 df_date 仍然显示 01 Jan),然后 df_dateDue 设置为 11 Jan

  3. 再次触发事件。此时 var temp = 11 Jan(即使 df_date = 01 Jan),然后 df_dateDue 设置为 16 Jan

我在这里想念什么?

4

1 回答 1

2

在 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;

哦,让你的接受率提高。

于 2011-01-08T23:49:01.860 回答