Мне нужны разные конструкторы для моих экземпляров. Каков общий шаблон для этого?
javascript
design-patterns
oop
codeholic
источник
источник
function ({ oneThing = 7, otherThing = defaultValue } = {}) { }
. Дополнение, которое= {}
я добавил, - это еще один трюк, которому я недавно научился, на случай, если вы хотите, чтобы пользователь вообще не передавал никаких объектов и использовал все значения по умолчанию.return new this();
,return new this.otherStaticFactoryFunction();
и т. д.)!Ответы:
В JavaScript нет перегрузки функций, в том числе для методов или конструкторов.
Если вы хотите, чтобы функция вела себя по-разному в зависимости от количества и типов параметров, которые вы ей передаете, вам придется обнюхивать их вручную. JavaScript с радостью вызовет функцию с большим или меньшим количеством аргументов, чем заявлено.
Вы также можете получить доступ
arguments
как к массиву, чтобы получить дополнительные аргументы.Если вам нужны более сложные аргументы, может быть хорошей идеей поместить некоторые или все из них в поиск по объектам:
Python демонстрирует, как аргументы по умолчанию и именованные аргументы могут использоваться для охвата большинства случаев использования более практичным и изящным способом, чем перегрузка функций. JavaScript, не так уж и много.
источник
MyObj({foo: "foo"})
плюсMyObj({bar: "bar"})
. MyObj имеет два конструктора, но оба принимают один аргумент, который является строкой :-)Как вы его нашли?
источник
вы можете использовать класс со статическими методами, которые возвращают экземпляр этого класса
с этим шаблоном вы можете создать мульти-конструктор
источник
Не хотелось делать это вручную, как в ответе bobince, поэтому я просто полностью сорвал шаблон параметров плагина jQuery.
Вот конструктор:
Вот разные способы создания экземпляров:
И вот что из этого получилось:
источник
Продолжая с ответом eruciform, вы можете связать свой
new
вызов со своимinit
методом.источник
new Foo()
вызов иinit
объединить в цепочку, потому что я не мог получить доступ к свойствам объектов. Я должна была бежатьvar a = new Foo(); a.init_1('constructor 1');
Иногда значений по умолчанию для параметров достаточно для нескольких конструкторов. И когда этого недостаточно, я пытаюсь обернуть большую часть функциональности конструктора в функцию init (other-params), которая вызывается впоследствии. Также рассмотрите возможность использования концепции фабрики для создания объекта, который может эффективно создавать другие объекты, которые вы хотите.
http://en.wikipedia.org/w/index.php?title=Factory_method_pattern&oldid=363482142#Javascript
источник
Вы можете использовать объекты деструктуризации в качестве параметров конструктора в ES6.
Вот шаблон:
У вас не может быть нескольких конструкторов, но вы можете использовать деструктурирование и значения по умолчанию, чтобы делать то, что хотите.
И вы можете сделать это, если хотите поддерживать конструктор без параметров.
источник
Useges:
источник
Это пример, приведенный для нескольких конструкторов в Программе в HTML5 с помощью JavaScript и CSS3 - Exam Ref .
источник