JavaScript - как НЕ назначать по ссылке - PullRequest
4 голосов
/ 03 февраля 2012

Хорошо, рассмотрим этот бит кода:

var d1 = new Date();
var d2 = d1;

d2.setDate(d2.getDate()+1);
alert(d1 + "\n" + d2);

Несмотря на то, что я звоню setDate() на d2, d1 также увеличивается. Я понимаю, что это потому, что d1 назначен на d2 по ссылке. Мой вопрос ... как мне НЕ делать этого, чтобы .setDate() применялся только к d2?

Ответы [ 3 ]

10 голосов
/ 03 февраля 2012

В JavaScript все объекты присваиваются переменным «по ссылке» .Вам необходимо создать копию объекта;Date упрощает:

var d2 = new Date(d1);

Это создаст новый объект даты, копирующий значение d1.

1 голос
/ 03 февраля 2012

Вам нужно

var d2 = new Date(d1.getTime());

Подробнее см. Как клонировать объект Date в JavaScript .

0 голосов
/ 03 февраля 2012

думаю, что это должно работать:

var d1 = new Date();
var d2 = new Date();
d2.setDate(d1.getDate());

d2.setDate(d2.getDate()+1);
alert(d1 + "\n" + d2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...