当应用于一个对象时,setHours()会更改两个对象的日期

时间:2014-03-27 16:54:37

标签: javascript

我有一个Date对象,我想创建另一个四小时后的Date对象。我写了以下代码

eventStart = new Date();

eventEnd = eventStart;
eventEnd.setHours(eventEnd.getHours() + 4);

console.log(eventStart);
console.log(eventEnd);

两个console.logs在四小时后给出相同的日期?

为什么setHours适用于这两个日期对象?是否有解决方法?

另请参阅以下JSFiddle:http://jsfiddle.net/AT3K2/

1 个答案:

答案 0 :(得分:6)

当你这样做时

eventEnd = eventStart;

您将eventEnd的值设置为eventStart相同,即引用到同一对象。也就是说,你没有两个对象,你有一个对象和两个对象:

+---------------------+
| eventStart variable |---\
+---------------------+   |    +------------------------+
                          +--->| the actual Date object |
+---------------------+   |    +------------------------+
| eventEnd variable   |---/
+---------------------+

要创建一个生命独立的新对象,请执行以下操作:

eventEnd = new Date(eventStart.getTime());

此操作通常称为克隆。