0

すべての foo.dates が同じ値である理由がわかりません。反復ごとに1日ずつ増えると予想していました。

誰かがその理由と可能な解決策を説明できれば:)

ありがとうございました。

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"
    }
] 
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;
  }
})();

次の日付(); //Fri Jan 02 1970 01:00:00 GMT+0100 (西ヨーロッパ標準時)

次の日付(); //Sat Jan 03 1970 01:00:00 GMT+0100 (西ヨーロッパ標準時)

nextDate の最初の呼び出しで 1 月 1 日を指定する場合は、++days を days++ に変更します。

于 2013-04-18T09:05:11.243 に答える