Necesito diferentes constructores para mis instancias. ¿Cuál es un patrón común para eso?
javascript
design-patterns
oop
codeholic
fuente
fuente
function ({ oneThing = 7, otherThing = defaultValue } = {}) { }
. El extra= {}
que puse allí es otro truco que aprendí recientemente, en caso de que desee la posibilidad de que el usuario no pase ningún objeto y use todos los valores predeterminados.return new this();
,return new this.otherStaticFactoryFunction();
, etc.)!Respuestas:
JavaScript no tiene sobrecarga de funciones, incluso para métodos o constructores.
Si desea que una función se comporte de manera diferente según el número y los tipos de parámetros que le pase, tendrá que rastrearlos manualmente. JavaScript felizmente llamará a una función con más o menos que el número declarado de argumentos.
También puedes acceder
arguments
como una matriz para obtener más argumentos.Si necesita argumentos más complejos, puede ser una buena idea poner algunos o todos dentro de una búsqueda de objetos:
Python demuestra cómo los argumentos predeterminados y con nombre se pueden usar para cubrir la mayoría de los casos de uso de una manera más práctica y elegante que la sobrecarga de funciones. JavaScript, no tanto.
fuente
MyObj({foo: "foo"})
másMyObj({bar: "bar"})
. MyObj tiene dos constructores, pero ambos toman un argumento, que es una cadena :-)¿Cómo encuentras este?
fuente
puede usar la clase con métodos estáticos que devuelven una instancia de esa clase
con este patrón puedes crear multi constructor
fuente
No tenía ganas de hacerlo a mano como en la respuesta de bobince, así que simplemente quité por completo el patrón de opciones de complemento de jQuery.
Aquí está el constructor:
Aquí hay diferentes formas de instanciación:
Y esto es lo que hizo:
fuente
Yendo más allá con la respuesta de eruciform, puede encadenar su
new
llamada a suinit
método.fuente
new Foo()
y llamar ainit
juntos porque no pude acceder a las propiedades de los objetos. Tuve que corrervar a = new Foo(); a.init_1('constructor 1');
A veces, los valores predeterminados de los parámetros son suficientes para varios constructores. Y cuando eso no es suficiente, trato de envolver la mayor parte de la funcionalidad del constructor en una función init (other-params) que se llama después. También considere usar el concepto de fábrica para hacer un objeto que pueda crear efectivamente los otros objetos que desee.
http://en.wikipedia.org/w/index.php?title=Factory_method_pattern&oldid=363482142#Javascript
fuente
Puede utilizar Desestructurar objetos como parámetros de constructor en ES6
Aquí está el patrón:
No puede tener varios constructores, pero puede usar la desestructuración y los valores predeterminados para hacer lo que quiera.
Y puede hacer esto si desea admitir un constructor 'sin parámetros'.
fuente
Usos:
fuente
Este es el ejemplo dado para múltiples constructores en Programación en HTML5 con JavaScript y CSS3 - Examen Ref .
fuente