JackShcherbakov
@JackShcherbakov

Где разница между статическими функциями и фабричными?

Эта статья уже 2-ой раз меня в ступор вводит https://learn.javascript.ru/static-properties-and-... Вообщем, может кто-нибудь нормально объяснить где разница или ссылку на статью дать, хоть я и искал.
Правильно скзать вот так:
  • Все функции, что создают объект - фабричные (фабрика создает что-то)
  • Все функции, которые не создают - статичные (керпичи, которые фабрика создает)

Но примеры в статье меня сбивают.
  • Вопрос задан
  • 416 просмотров
Пригласить эксперта
Ответы на вопрос 2
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
Любой атрибут (свойство), содержащий функцию, называется методом.

Атрибут, присвоенный функции - конструктору объекта (и только функции-конструктору), называется статическим атрибутом. Соответственно, любой метод, присвоенный функции-конструктору, называется статическим методом.

Любая функция, главным назначением которой является создание объекта и возвращение его в качестве результата, называется фабрикой (фабричной функцией).

Если фабричная функция является методом, она называется фабричным методом.

Фабричный статический метод - это статический метод, являющийся фабричным.
Ответ написан
@Abcdefgk
Ну, в любой функции, которая объявляется так
function Foo(a, b, c) {...}
внутри спрятан конструктор (который по умолчанию даже называется так же). Поэтому на её основе можно создать "экземпляр" методом new с передачей параметров
var f = new Foo(1, 2, 3);
Для особо впечатлительных любителей "стандартного ООП" в 2015 году даже придумали синтаксис:
class Foo {
  constructor(a, b, c) {
  ...
  }
}

хотя это одно и тоже.
Поскольку в javascript "не настоящее ООП", то конструктор в функции только один, нет "перегрузки методов", и при её написании надо - внутри - предусмотреть разные варианты количества передаваемых параметров при создании "экземпляра". На выходе (после объявления объекта посредством new) получается сразу готовый объект с переданными - во время объявления - параметрами. В "настоящем ООП" это дело решается с помощью написания нескольких конструкторов с разным количеством агрументов, ну а тут он - один (с переменным числом аргументов).
И чтоб не париться с разбором внутри, можно написать "основную" функцию совсем без аргументов, а потом приписать "добавочные" методы с разными вариантами числа аргументов-параметров ЗА ПРЕДЕЛАМИ функции-конструктора.
Foo.showHimself = function(arguments) { ... }
Они и есть "фабричные".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы