Лучше использовать именованные функции , чем arguments.callee:
function foo () {
... foo() ...
}
лучше, чем
function () {
... arguments.callee() ...
}
, именованная функция будет иметь доступ к своей вызывающей стороне через вызывающая сторона свойство:
function foo () {
alert(foo.caller);
}
, который лучше, чем
function foo () {
alert(arguments.callee.caller);
}
, депрекация происходит из-за текущего ECMAScript принципы разработки .
Нет, вы не пропустили класс общего назначения.
У меня есть тип Range
в MiscUtil , который может вас заинтересовать - и это, безусловно, упрощает манипуляции с DateTime
. Ссылаясь на ответ Марка, я не могу вспомнить, является ли это структурой или классом - вы, конечно, можете изменить это.
Это приятно и легко пройти, благодаря махинациям дженериков Марка (при условии, что вы ' re с использованием .NET 3.5, по крайней мере - это возможно с 2.0, но не поддерживается на данный момент);
Range<DateTime> range = 19.June(1976).To(DateTime.Today);
foreach (DateTime date in range.Step(1.Days())
{
// I was alive in this day
}
(Здесь также используется набор методов расширения - более полезных для тестирования, чем для производства.)
Чтобы обратиться к другому вопросу в ответе Марка Noda Time , безусловно, сможет лучше выразить концепцию даты, чем .NET API,
Я не знаю ни одного собственного .NET-класса с природой DateRange. Наиболее близким вариантом, вероятно, является комбинация DateTime + TimeSpan или DateTime / DateTime.
Я думаю, что то, что вы хотите, довольно разумно.
Как уже упоминали Марк и Джон, я бы создал это как тип значения, который является неизменяемым. Я бы предпочел реализовать его как структуру и реализовать интерфейсы IEquatable и IComparable.
При использовании ORM, такого как NHibernate, вы сможете сохранить тип значения внутри таблицы, представляющей сущность.
Если вы много работаете с датами, да - диапазон может оказаться полезным. На самом деле это один из тех очень редких случаев, когда вы должны , вероятно, записать его как struct
(неизменяемая). Обратите внимание, однако, что «Noda Time», вероятно, даст вам все это и даже больше (когда оно будет завершено). Раньше я делал программное обеспечение для планирования; У меня была пара таких структур (для немного разных работ).
Обратите внимание, что для этого не существует удобной конструкции BCL.
Также - подумайте обо всех замечательных методах (и, возможно, операторах), которые вы можете централизовать, когда у вас есть диапазон; «содержит» (даты и времени? другого диапазона? включая / исключая пределы?), «пересекает», смещение по (промежуток времени) и т. д. определенный случай наличия типа для его обработки. Обратите внимание, что на уровне ORM