为什么这些对象都具有相同的日期?

时间:2013-04-18 08:58:58

标签: javascript

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

如果有人能够解释为什么以及可能的解决方案那么好:)

谢谢。

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"
    }
] 

1 个答案:

答案 0 :(得分:2)

因为在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(); // Fri Jan 02 1970 01:00:00 GMT + 0100(欧洲标准时间)

nextDate(); //周六03 03 1970 01:00:00 GMT + 0100(欧洲标准时间)

如果您希望第一次调用nextDate给1月1日,那么将++天更改为几天++