0

I don't seem to understand why all the foo.dates are the same value. I was expecting it to increase by one day for each iteration.

If anyone could explain why and a possible solution that would be nice :)

Thank you.

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 Objects:

[
    {
        "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"
    }
] 
4

1 回答 1

2

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

因此,您对所有 foo 实例使用相同的日期 (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;
  }
})();

下一个日期();//1970 年 1 月 2 日星期五 01:00:00 GMT+0100(西欧标准时间)

下一个日期();//1970 年 1 月 3 日星期六 01:00:00 GMT+0100(西欧标准时间)

如果您希望第一次调用 nextDate 给 Jan 1 则将 ++days 更改为 days++

于 2013-04-18T09:05:11.243 回答