пятница, 22 мая 2015 г.

Клонировать объект типа Date в JavaScript

var d1 = new Date();
var d2 = d1; // так не клонируется
d1.setMonth(d2.getMonth()+1); // меняем месяц в d1 - поменяется ли
                              // при этом d2?
alert(d2-d1); // ноль, потому что меняя  d1, меняем и d2

d2 = new Date(d1.getTime()); // клонируем
d1.setMonth(d2.getMonth()+1);
alert(d2-d1); // не ноль - клонирование прошло успешно 
Кстати, клонировать любой объект в JS можно так (понятно, что имеется в виду «клонировать данные объекта», то есть фактически клонировать JSON структуру с данными, методы объекта, если они есть, при этом не будут клонированы, то есть такой метод не подойдёт для клонирования дат):
// клонируем объект cloningObject
var newObject = JSON.parse(JSON.stringify(cloningObject));