¿Cuáles son las formas posibles de crear objetos en JavaScript?

Repaso de las distintas maneras de crear objetos en JavaScript: literales, constructores, Object.create, clases, factories y singleton.

JavaScript permite crear objetos de varias maneras. Cada forma sirve a un caso de uso distinto: literales para datos puntuales, clases o constructores cuando necesitas instanciar varios objetos similares, y Object.create cuando quieres controlar el prototipo de forma explicita.

1. Object literal

La forma mas directa y comun. Util para configuraciones, parametros y estructuras puntuales.

Object literal

javascript
const usuario = {
  nombre: 'Ada',
  edad: 36,
  saludar() {
    return `Hola, soy ${this.nombre}`;
  },
};

2. Constructor Object o new Object()

Equivalente al literal pero usando el constructor global. Rara vez se usa hoy en dia.

new Object()

javascript
const usuario = new Object();
usuario.nombre = 'Ada';
usuario.edad = 36;

3. Funcion constructora

Antes de las clases ES6, era la manera estandar de crear “tipos” de objetos. Aun se ve en codigo legacy y librerias antiguas.

Constructor function

javascript
function Usuario(nombre, edad) {
  this.nombre = nombre;
  this.edad = edad;
}

Usuario.prototype.saludar = function () {
  return `Hola, soy ${this.nombre}`;
};

const ada = new Usuario('Ada', 36);

4. Object.create

Crea un objeto cuyo prototipo es el que tu indiques. Es la manera mas explicita de trabajar con herencia prototipal pura.

Object.create

javascript
const base = {
  saludar() {
    return `Hola, soy ${this.nombre}`;
  },
};

const ada = Object.create(base);
ada.nombre = 'Ada';

ada.saludar(); // 'Hola, soy Ada'

5. Clase ES6

Azucar sintactico sobre las funciones constructoras. Es la forma idiomatica en codigo moderno.

ES6 class

javascript
class Usuario {
  constructor(nombre, edad) {
    this.nombre = nombre;
    this.edad = edad;
  }

  saludar() {
    return `Hola, soy ${this.nombre}`;
  }
}

const ada = new Usuario('Ada', 36);

6. Factory function

Una funcion comun que devuelve un objeto. No necesita new y permite encapsular variables privadas mediante closures.

Factory function

javascript
function crearUsuario(nombre, edad) {
  return {
    nombre,
    edad,
    saludar() {
      return `Hola, soy ${nombre}`;
    },
  };
}

const ada = crearUsuario('Ada', 36);

7. Singleton via IIFE

Cuando solo necesitas una unica instancia, una IIFE permite encapsular estado privado y exponer un API publico.

Singleton

javascript
const configuracion = (function () {
  let idioma = 'es';

  return {
    getIdioma: () => idioma,
    setIdioma: (nuevo) => {
      idioma = nuevo;
    },
  };
})();

Resumen

  • Para datos puntuales: object literal.
  • Para multiples instancias con misma forma: clase (preferida hoy) o funcion constructora.
  • Para herencia explicita por prototipo: Object.create.
  • Para encapsular estado privado sin new: factory function o singleton/IIFE.

Referencias