Preciso de construtores diferentes para minhas instâncias. Qual é um padrão comum para isso?
javascript
design-patterns
oop
codeholic
fonte
fonte
function ({ oneThing = 7, otherThing = defaultValue } = {}) { }
. O extra que= {}
eu coloquei lá é outro truque que aprendi recentemente, caso você queira a possibilidade de o usuário não passar nenhum objeto e usar todos os padrões.return new this();
,return new this.otherStaticFactoryFunction();
, etc.)!Respostas:
O JavaScript não possui sobrecarga de função, inclusive para métodos ou construtores.
Se você deseja que uma função se comporte de maneira diferente, dependendo do número e tipos de parâmetros que você passar para ela, será necessário farejá-los manualmente. Felizmente, o JavaScript chamará uma função com mais ou menos do que o número declarado de argumentos.
Você também pode acessar
arguments
como um array para obter mais argumentos passados.Se você precisar de argumentos mais complexos, pode ser uma boa ideia colocar alguns ou todos eles dentro de uma pesquisa de objeto:
O Python demonstra como argumentos padrão e nomeados podem ser usados para cobrir a maioria dos casos de uso de uma maneira mais prática e graciosa do que a sobrecarga de funções. JavaScript, nem tanto.
fonte
MyObj({foo: "foo"})
plusMyObj({bar: "bar"})
. MyObj tem dois construtores -, mas ambos argumento Take One, que é uma cadeia :-)Como você encontra esse?
fonte
você pode usar classe com métodos estáticos que retornam uma instância dessa classe
com esse padrão, você pode criar vários construtores
fonte
Não estava com vontade de fazê-lo manualmente, como na resposta de bobince, então apenas retirei completamente o padrão de opções do plugin do jQuery.
Aqui está o construtor:
Aqui estão diferentes maneiras de instanciação:
E aqui está o que isso fez:
fonte
Indo mais longe com a resposta da eruciforme, você pode encadear sua
new
chamada em seuinit
método.fonte
new Foo()
e ligar para o grupoinit
porque não consegui acessar propriedades nos objetos. Eu tive que corrervar a = new Foo(); a.init_1('constructor 1');
Às vezes, os valores padrão dos parâmetros são suficientes para vários construtores. E quando isso não é suficiente, tento agrupar a maior parte da funcionalidade do construtor em uma função init (other-params) chamada posteriormente. Considere também usar o conceito de fábrica para criar um objeto que possa efetivamente criar os outros objetos que você deseja.
http://en.wikipedia.org/w/index.php?title=Factory_method_pattern&oldid=363482142#Javascript
fonte
Você pode usar objetos de Reestruturação como parâmetros do construtor no ES6
Aqui está o padrão:
Você não pode ter vários construtores, mas pode usar valores de desestruturação e padrão para fazer o que deseja.
E você pode fazer isso se desejar oferecer suporte a um construtor 'sem parâmetros'.
fonte
Useges:
fonte
Este é o exemplo dado para vários construtores em Programação em HTML5 com JavaScript e CSS3 - Ref .
fonte