dateJS перезаписывает переменные - PullRequest
1 голос
/ 09 ноября 2011

Я только начинаю с dateJS, и это похоже на большую библиотеку, но я явно что-то упускаю (возможно, глупая ошибка), но в моей функции мне нужно 3 даты: clickedDate, weekStart & weekEnd. Но используя dateJS, я, кажется, перезаписываю каждую переменную. Может кто-нибудь указать на мою ошибку?

var clickDate = myDate;
    console.log(clickDate);
var weekStart = Date.parse(clickDate).last().monday();
    console.log(clickDate);
var weekEnd = Date.parse(clickDate).next().sunday();
    console.log(weekEnd);

console.log('break');   

console.log(clickDate);
console.log(weekStart);
console.log(weekEnd);

Консоль показывает следующее

Date {Wed Nov 30 2011 00:00:00 GMT-0700 (US Mountain Standard Time)}
Date {Mon Nov 28 2011 00:00:00 GMT-0700 (US Mountain Standard Time)}
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)}
break
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)}
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)}
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)}

1 Ответ

3 голосов
/ 22 ноября 2011

Это не проблема с Datejs, а особенность (?) Объектов JavaScript Date. В JavaScript объект Date является изменчивым, и установка значения объекта Date для новой переменной создает ссылку на оригинал, а не на новый объект.

Это можно продемонстрировать с помощью простого старого JavaScript (без Datejs):

Exmaple

var a = new Date(2011, 0, 1);
var b = a;
var c = b;

console.log('a', a); // 1-Jan-2011
console.log('b', b); // 1-Jan-2011
console.log('c', c); // 1-Jan-2011

// setting only 'a' will cause 'b' and 'c' to update as well.
a.setDate(10);

console.log('a', a); // 10-Jan-2011
console.log('b', b); // 10-Jan-2011
console.log('c', c); // 10-Jan-2011

Способ обойти эту проблему, если использовать Datejs, заключается в «клонировании» объектов Date. В следующем примере демонстрируется использование функции .clone() для объектов Date 'b' и 'c'.

Пример

var a = new Date(2011, 0, 1);
var b = a.clone(); // clone creates a new 'copy' of 'a'.
var c = b.clone();

console.log('a', a); // 1-Jan-2011
console.log('b', b); // 1-Jan-2011
console.log('c', c); // 1-Jan-2011

a.setDate(10);

console.log('a', a); // 10-Jan-2011
console.log('b', b); // 1-Jan-2011
console.log('c', c); // 1-Jan-2011

Запустив вышеизложенное, вы должны увидеть, что окончательные результаты «b» и «c» по-прежнему отражают их исходные значения, даже если «a» изменилось.

Надеюсь, это поможет.

...