2014-03-27 19 views
1

我有一個Date對象,我想創建另一個四小時後的Date對象。我寫了下面的代碼setHours()更改兩個對象的日期時應用於一個

eventStart = new Date(); 

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

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

這兩個console.logs給四個小時後的同一日期?

爲什麼setHours適用於這兩個日期對象?是否有解決方法?

另請參閱以下的jsfiddle:http://jsfiddle.net/AT3K2/

回答

6

當你

eventEnd = eventStart; 

您設置的eventEnd值是相同eventStart,這是一個參考同一個對象。也就是說,你沒有兩個對象,你有一個對象,並兩次提到它:

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

要創建新的對象,其生活將是獨立的,這樣做:

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

此操作通常稱爲克隆。

+0

正確,值得一提的OP - 不像其他語言JS日期是不可改變的。 –

+0

@BenjaminGruenbaum這裏的許多編碼人員都知道一種語言,其中的標準日期API是類似的,也是低劣的......你知道那種語言是JavaScript,因爲汽車是貨物... –

+0

這是僅用於日期api嗎?或者這是否也適用於其他對象? – Bunker

相關問題