Funciones de fábrica y funciones constructoras en JavaScript
Crear objetos uno por uno es un error.
Si escribes un objeto manual para cada usuario o compañero de clase, repites código. Si tienes 100 usuarios, escribes la misma lógica 100 veces. Esto provoca errores. Podrías cambiar accidentalmente una propiedad más tarde y romper tu aplicación.
En su lugar, utiliza estos dos patrones para escribir código limpio.
- Funciones de fábrica (Factory Functions)
Piensa en una fábrica real. Entran materias primas. Sale un producto terminado.
Una función de fábrica recibe parámetros y devuelve un nuevo objeto.
Ejemplo:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
Los beneficios:
- Escribes la lógica una sola vez.
- Reutilizas la función para cada nuevo objeto.
- Los datos permanecen seguros. El nombre se mantiene dentro del alcance (scope) de la función. No puedes sobrescribirlo accidentalmente desde fuera.
- Funciones constructoras (Constructor Functions)
Las funciones constructoras también crean objetos. Utilizan la palabra clave new y la palabra clave this. Por convención, estas comienzan con una letra mayúscula.
Ejemplo:
function Classmate(name) {
this.name = name
this.reply = function() {
return `${this.name} is present`
}
}
Cuando usas new, JavaScript hace el trabajo por ti:
- Crea un nuevo objeto.
- Lo asigna a
this. - Devuelve el objeto automáticamente.
No necesitas una sentencia return.
Escalando tu código
Puedes combinar estos patrones con arrays para manejar grandes cantidades de datos. En lugar de escribir cada nombre, utiliza una función map.
Ejemplo:
const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))
Ahora tienes una lista de objetos lista para usar.
Resumen:
- Evita la creación manual de objetos para prevenir la repetición.
- Usa Funciones de Fábrica para encapsular la lógica y proteger los datos.
- Usa Funciones Constructoras para aprovechar la palabra clave
newpara la creación automática de objetos. - Escribe siempre tu lógica una sola vez y reutilízala en todas partes.
Fuente: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb