Listo (Ctrl + Enter para ejecutar) Bootcamp Fullstack »
app.js
Tab = 4 espacios
1
// Implementación de Singleton en ES6
class GestorEstadoGlobal {
    static #instanciaUnica = null;

    constructor() {
        // Si ya fue instanciada, retornamos la misma referencia de memoria
        if (GestorEstadoGlobal.#instanciaUnica) {
            return GestorEstadoGlobal.#instanciaUnica;
        }

        // Estado inicial de la aplicación
        this.sesionIniciada = false;
        this.usuarioActivo = null;
        this.idioma = "es";
        this.idInstancia = Math.random().toString(36).substring(2, 9);

        // Guardamos la referencia única
        GestorEstadoGlobal.#instanciaUnica = this;
    }

    iniciarSesion(usuario) {
        this.sesionIniciada = true;
        this.usuarioActivo = usuario;
        console.log(` Sesión iniciada globalmente para: ${usuario.nombre}`);
    }

    cerrarSesion() {
        this.sesionIniciada = false;
        this.usuarioActivo = null;
        console.log(" Sesión cerrada globalmente.");
    }

    obtenerEstado() {
        return {
            idInstancia: this.idInstancia,
            autenticado: this.sesionIniciada,
            usuario: this.usuarioActivo ? this.usuarioActivo.nombre : "Anónimo",
            idioma: this.idioma
        };
    }
}

// ==========================================
// PRUEBA EN EL SANDBOX
// ==========================================
console.log("=== CREANDO INSTANCIA 1 EN MÓDULO A ===");
const estadoEnModuloA = new GestorEstadoGlobal();
console.log("Estado inicial:", estadoEnModuloA.obtenerEstado());

// Iniciamos sesión en el Módulo A
estadoEnModuloA.iniciarSesion({ nombre: "Carlos Mendoza", rol: "Admin" });

console.log("\n=== CREANDO INSTANCIA 2 EN MÓDULO B ===");
// En otro archivo completamente distinto, alguien hace "new GestorEstadoGlobal()"
const estadoEnModuloB = new GestorEstadoGlobal();

console.log("Estado leído desde Módulo B:", estadoEnModuloB.obtenerEstado());

console.log("\n=== COMPROBACIÓN DE IDENTIDAD EN MEMORIA RAM ===");
const sonIdenticos = (estadoEnModuloA === estadoEnModuloB);
console.log("¿estadoEnModuloA === estadoEnModuloB?:", sonIdenticos); // true!
console.log(`ID Instancia A: ${estadoEnModuloA.idInstancia}`);
console.log(`ID Instancia B: ${estadoEnModuloB.idInstancia}`);
Haz clic para editar este código
Vista Previa
Consola Virtual JavaScript