Я занимаюсь разработкой приложения для браузера, чувствительного к текущей дате.
Во всем коде моего приложения я вызываю new Date
, выполняю вычисления на основе текущего времени и соответствующим образом отображаю представление.
Чтобы протестировать мое приложение на разные потенциальные календарные дни, мне пришлось бы постоянно менять системные часы на прошлое или будущее, что раздражает и, вероятно, не подходит для моего компьютера.
Так что чистов целях тестирования (я бы никогда не использовал этот код в рабочей среде), я решил переопределить встроенный конструктор Date
, выполнив в консоли следующее:
// create a date object for this Friday:
var d = new Date(2012, 0, 20)
//override Date constructor so all newly constructed dates return this Friday
Date = function(){return d}
Учитывая это предположение, я попыталсяэто и привело к странным результатам:
var now = new Date
Sat Apr 07 2012 00:00:00 GMT-0400 (EDT)
now = new Date
Tue Jul 10 2012 00:00:00 GMT-0400 (EDT)
now = new Date
Wed Jul 09 2014 00:00:00 GMT-0400 (EDT)
now = new Date
Wed Jun 07 2023 00:00:00 GMT-0400 (EDT)
... и так далее ...
У меня вопрос, что именно здесь происходит?
Если япереопределил конструктор для возврата статической даты, почему он дает несвязанные и постоянно увеличивающиеся даты?
Кроме того, есть ли эффективный способ переопределить Date constructor для возврата статической даты в будущем без необходимости проходить через все вызовы инстанцирования даты в моем коде и изменять вывод?
Заранее спасибо.
РЕДАКТИРОВАТЬ:
Я попробовал свой код в новом окне, и он работал как ожидалось.
Кажется, виновником был плагин dateQicker пользовательского интерфейса jQuery, который вызывал свой метод "refresh".Когда я отключаю его вызов, переопределение даты работает нормально, но как только я использую средство выбора даты, происходит странное поведение, описанное выше.
Не знаю, почему этот популярный плагин каким-то образом повлияет на что-то глобальное, подобное этому.Если у кого-то есть идеи, дайте мне знать.
Извините, что не выяснил истинного виновника ранее.