我似乎不明白为什么所有的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"
}
]
答案 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日,那么将++天更改为几天++