Статични и фабрични методи

Методи и свойства, които не са обвързани с конкретен екземпляр на обект, се наричат ​​"статични". Те се записват директно в самата функция конструктор.

Статични свойства

Кодът по-долу използва статичните свойства 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 = функция() < . >. А за полиморфен конструктор извикването без аргумент ще създаде анонимен, така че трябва да добавите параметър - „тип посетител“ и да усложните кода с това.

Следователно е по-добре да се използват полиморфни конструктори, където е необходим полиморфизъм, т.е. когато не е ясно какъв тип аргумент ще бъде подаден и искате да покриете всички опции в един конструктор.

А в други случаи чудесна алтернатива са фабричните методи.

Статичните свойства и методи на обект са полезни в следните случаи:

  • Общи действия и изчисления, свързани с всички обекти от даден тип. В горните примери това е броят.
  • Методи, които не са обвързани с конкретен обект, като например сравнение.
  • Помощни методи, които са полезни извън обекта, като форматиране на дата.
  • фабрични методи.

Брояч на обекти

Добавяне към конструктора на статии:

  • Преброяване на общия брой създадени обекти.
  • Запомняне на датата на последния създаден обект.

Използвайте статични свойства за това.