Статични и фабрични методи
Методи и свойства, които не са обвързани с конкретен екземпляр на обект, се наричат "статични". Те се записват директно в самата функция конструктор.
Статични свойства
Кодът по-долу използва статичните свойства Article.count и Article.DEFAULT_FORMAT:
Те съхраняват данни, които са специфични не за един обект, а за всички статии като цяло.
Обикновено това са по-често константи, като формата по подразбиране Article.DEFAULT_FORMAT.
Статични методи
Вече сме запознати с примери за статични методи: това са вградените методи String.fromCharCode, Date.parse.
Нека създадем статичен метод за Article Article.showCount() :
Тук Article.count е статично свойство, а Article.showCount е статичен метод.
Обърнете внимание на използването на това в примера по-горе. Въпреки че променливата и методът са статични, те все още са полезни. В ред (1) е равно на чл.
Пример: сравнение на обекти
Друга добра употреба е сравняването на обекти.
Например, имаме обект Journal за дневници. Списанията могат да се сравняват - по дебелина, по тегло, по други параметри.
Нека декларираме "стандартна" функция за сравнение, която ще сравнява по дата на публикуване. Тази функция за сравнение, разбира се, не е обвързана с конкретно списание, а се отнася за списанията като цяло.
Така че нека го дефинираме като статичен метод Journal.compare:
Примерът по-долу използва тази функция за намиране на най-ранния журнал в масив:
Статичният метод може да се използва и за функции, които изобщо не изискват обект.
Например методът formatDate(date) може да бъде направен статичен. Той ще форматира датата "както е обичайно в списанията", докато може да се използва навсякъдекод, не е необходимо да създавате журнал.
Фабрични методи
Помислете за ситуация, при която даден обект трябва да бъде създаден по различни начини. Например, това е реализирано във вградения обект Date. Той третира аргументи от различни типове по различен начин:
- new Date() - създава обект с текущата дата,
- нова дата (милисекунди) - създава дата с броя на милисекунди милисекунди,
- нова дата (година, месец, ден. ) - създава дата от година, месец, ден...
- new Date(datestring) - чете дата от datestring
„Фабричният статичен метод“ е удобна алтернатива на такъв конструктор. Това е името на статичен метод, който се използва за създаване на нови обекти (затова се нарича "фабрика").
Пример за вграден фабричен метод е String.fromCharCode(code). Този метод създава низ от код на символ:
Но низовете са твърде прост пример, нека разгледаме нещо по-сложно.
Да кажем, че трябва да създадем потребителски обекти: анонимен new User() и с данни new User() .
Можете, разбира се, да създадете полиморфна функция на потребителски конструктор:
Подходът с използване на фабрични методи би бил различен. Вместо да анализираме параметрите в конструктора, ние създаваме два метода: User.createAnonymous и User.createFromData.
Ползи от използването на фабрични методи:
- По-добра четимост на кода. Както конструкторът - вместо една голяма функция, няколко малки, така и извикващият код - ясно се вижда какво точно се създава.
- По-добър контрол на грешките, като ако нищо не е предадено на createFromData, ще има грешка и полиморфният конструктор ще създаде анонимен посетител.
- Удобна възможност за разширяване. Например, трябва да добавите създаването на администратор, без аргументи. Фабричният метод е лесен за изпълнение:User.createAdmin = функция() < . >. А за полиморфен конструктор извикването без аргумент ще създаде анонимен, така че трябва да добавите параметър - „тип посетител“ и да усложните кода с това.
Следователно е по-добре да се използват полиморфни конструктори, където е необходим полиморфизъм, т.е. когато не е ясно какъв тип аргумент ще бъде подаден и искате да покриете всички опции в един конструктор.
А в други случаи чудесна алтернатива са фабричните методи.
Статичните свойства и методи на обект са полезни в следните случаи:
- Общи действия и изчисления, свързани с всички обекти от даден тип. В горните примери това е броят.
- Методи, които не са обвързани с конкретен обект, като например сравнение.
- Помощни методи, които са полезни извън обекта, като форматиране на дата.
- фабрични методи.
Брояч на обекти
Добавяне към конструктора на статии:
- Преброяване на общия брой създадени обекти.
- Запомняне на датата на последния създаден обект.
Използвайте статични свойства за това.