Prowadzę do tego problemu. A teraz ma to związek z obiektem Date

var now = new Date();
var later = new Date();
later.setHours( later.getHours() + 8 );

<Wait for somthing>
now = later;
later.setHours( later.getHours() + 8 );

alert(now == later); //returns True

Myślałem, że można to rozwiązać za pomocą zwrotów zwrotnych:

var adjustTime = function(callback){
     now = later;
     callback();
}
adjustTime(function(){
    later.setHours( later.getHours() + 8 );
});

alert(now == later); //returns True

Czego nie rozumiem? Jak mogę poprawnie zaktualizować te zmienne?

Edytuj: Ok, powinienem wyjaśnić się trochę lepiej. Chcę zaktualizować zmienną, która ma być wartość później. A potem chcę wzrosnąć później z 8 godzinami.

0
kimpettersen 19 wrzesień 2012, 17:40

2 odpowiedzi

Najlepsza odpowiedź

Porównania równości między instancjami Date Tylko testy do równości odniesienia obiektu. W każdym razie, gdy to zrobisz:

now = later;

Następnie zmienne "teraz" i "później" odnosi się do tego samego obiektu. Aktualizacje "później" są zatem aktualizowane "teraz".

Metody "Setter" na prototypie Date wszystkie modyfikują obiekt bezpośrednio. To jest instancje Date nie są niezmienne.

edytuj - Zgaduję, że naprawdę chcesz zachować "teraz" i "później". W takim przypadku coś takiego jest prawdopodobnie tym, czego chcesz:

now = later;
later = new Date(later.getTime());
later.setHours(later.getHours() + 8);

Po tym, "teraz" i "później" nie będzie równy, ponieważ Ustawisz go na instancję nową Date.

6
Pointy 19 wrzesień 2012, 13:54

Po now = later; zmiana później będzie refleksja teraz i Verse-werset. jak oba są tym samym obiektem

   var now = new Date();
    var later = new Date();
    later.setHours( later.getHours() + 8 );

    <Wait for somthing>
    now = later; //  now and later have refeerence of same object 
    later.setHours( later.getHours() + 8 );

    alert(now == later); //returns True
1
Anoop 19 wrzesień 2012, 13:44