0

私はこの問題に遭遇し続けます。そして今、それは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

これはコールバックを使用して解決できると思いました:

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

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

何がわかりませんか?これらの変数を正しく更新するにはどうすればよいですか?

編集: OK、私は自分自身をもう少しよく説明する必要があります. 私がやりたいことは、 now 変数をlaterの値に更新することです。あとは8時間で増やしていきたいです。

4

2 に答える 2

6

Dateインスタンス間の同等性の比較は、オブジェクト参照の同等性をテストするだけです。そして、いずれにせよ、これを実行すると、次のようになります。

now = later;

次に、変数「now」と「later」は同じオブジェクトを参照します。したがって、「後で」への更新は「現在」への更新です。

Dateプロトタイプの「セッター」メソッドはすべて、オブジェクトを直接変更します。つまり、Dateインスタンスは不変ではありません。

編集—あなたが本当に望んでいるのは、「今」と「後で」を別々に保つことだと思います。その場合、このようなものがおそらくあなたが望むものです:

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

その後、新しい Dateインスタンスに設定するため、「now」と「later」は等しくなりません。

于 2012-09-19T13:44:57.857 に答える
1

後で変更した後now = later;、今とその逆に反映されます。両方とも同じオブジェクトなので

   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
于 2012-09-19T13:44:06.903 に答える