为什么这些物品都有相同的日期

Why do these objects all have the same date?

本文关键字:日期 为什么      更新时间:2023-09-26

我似乎不明白为什么所有的foo。日期是相同的值。我希望每一次迭代都能增加一天。

如果有人能解释一下原因和一个可能的解决方案,那就太好了:)

谢谢。

Date.prototype.nextDay=function()
{
    this.setDate(this.getDate()+1);
    return this;
}
aDate = new Date(0);
function foo()
{
    this.date = aDate.nextDay();
}
ary = new Array();
for (i=1;i<5;i++){    
    ary.push(new foo());
}
console.log(JSON.stringify(ary, null, 4));

Foo对象:

[
    {
        "date": "1970-01-05T00:00:00.000Z"
    },
    {
        "date": "1970-01-05T00:00:00.000Z"
    },
    {
        "date": "1970-01-05T00:00:00.000Z"
    },
    {
        "date": "1970-01-05T00:00:00.000Z"
    }
] 

因为在foo函数中引用了aDate,而this.date = aDate.nextDay() 没有克隆它。它只是创建对同一对象的新引用。

所以你在所有foo实例中使用相同的date (adate)实例。

您不需要更改Date的原型或使用new,如果您想要自1970年1月1日起的增量,则此函数将工作:-

var nextDate = (function() {
  var days = 0;
  return function() {
    var date = new Date(0);
    date.setDate(date.getDate() + ++days);
    return date;
  }
})();

nextDate ();//1970年1月2日星期五01:00:00 GMT+0100 (W.欧洲标准时间)

nextDate ();//1970年1月3日星期六01:00:00 GMT+0100 (W.欧洲标准时间)

如果您想要第一次调用nextDate给出1月1日,那么将++天更改为days++