В настоящее время я работаю над некоторым Javascript для синхронизации часов на стороне клиента с нашими серверами. Я делаю это, просматривая заголовок «Date» всех ответов Ajax (он должен быть точным только в течение нескольких секунд).
Чтобы остальная часть кода работала без проблем с помощью этой функции Date, я хочу переопределить встроенную функцию Date в стиле декоратора, чтобы я мог просто улучшить ее с помощью вычисленного отклонения часов.
Пока у меня есть это (что, кажется, работает):
var SystemDate = Date;
var ServerDate = function() {
var a = arguments;
switch(a.length){
case 0:
var system_date = new SystemDate();
return new SystemDate(system_date - ServerDate.skew);
case 1:
return new SystemDate(a[0]);
case 7:
return new SystemDate(a[0],a[1],a[2],a[3],a[4],a[5],a[6]);
}
};
ServerDate.parse = Date.parse;
ServerDate.UTC = Date.UTC;
ServerDate.skew = 0;
var Date = ServerDate;
Теперь, когда я получаю изменение Ajax, я могу настроить свойство skew, и все новые экземпляры Date будут иметь скорректированное значение.
Я действительно вызываю критику. Есть несколько вещей, в которых я не уверен:
- Это хорошая идея? - Я не программист Javascript, поэтому я не знаю, какие грехи я только что совершил
- Как я могу обрабатывать различные длины аргументов более аккуратно - это выглядит очень смешно
- Копирование методов класса UTC и синтаксического анализа кажется очень хрупким
- Новая функция Date теперь возвращает объект даты на консоли, а не строковое представление.