所以我有这段代码:
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对象。