所以我有这段代码:



var shotTime = this.lastShot;
  shotTime.setMilliseconds(this.lastShot.getMilliseconds() + this.shootGrace);
  console.log(shotTime);
  console.log(new Date);
  console.log(new Date()>shotTime);
  console.log("-------------------------------");
if(new Date()>shotTime){
  console.log("##############################");
  this.lastShot = new Date();
}





这将产生以下输出:

Mon Mar 12 2018 20:35:44 GMT+0000 (GMT Standard Time)
 Mon Mar 12 2018 20:35:45 GMT+0000 (GMT Standard Time)
 true
 -------------------------------
 ##############################
 Mon Mar 12 2018 20:35:45 GMT+0000 (GMT Standard Time)
 Mon Mar 12 2018 20:35:45 GMT+0000 (GMT Standard Time)
 false
 -------------------------------
 Mon Mar 12 2018 20:35:46 GMT+0000 (GMT Standard Time)
 Mon Mar 12 2018 20:35:45 GMT+0000 (GMT Standard Time)
 false
 -------------------------------
 Mon Mar 12 2018 20:35:46 GMT+0000 (GMT Standard Time)
 Mon Mar 12 2018 20:35:46 GMT+0000 (GMT Standard Time)
 false
 -------------------------------
 Mon Mar 12 2018 20:35:47 GMT+0000 (GMT Standard Time)
 Mon Mar 12 2018 20:35:50 GMT+0000 (GMT Standard Time)
 true
 -------------------------------
 ##############################


这很奇怪,因为this.lastShot似乎在更改,而false则应该在true时才更改。我不知道为什么会有这种变化。

谢谢,埃德。

最佳答案

shotTime = this.lastShot;


执行此操作时,您不是要进行复制。现在,您有两个对同一个Date对象的引用。现在更改其中一个引用将同时影响两个引用。更改shotTime时,也要更改this.lastShot。做为测试:

var shotTime1 = new Date();
console.log(shotTime1.getMilliseconds());
var shotTime2 = shotTime1;
shotTime2.setMilliseconds(0);
console.log(shotTime1.getMilliseconds());


而且您会看到第二个为零,因为shotTime1和shotTime2都引用了相同的Date对象。

09-26 03:48