1
class Usuario {
// 1. Propiedad Estática Compartida (Contador Global)
static #totalUsuariosRegistrados = 0;
static ROL_DEFAULT = "estudiante";
constructor(nombre, email, rol = Usuario.ROL_DEFAULT) {
this.nombre = nombre;
this.email = email;
this.rol = rol;
// Cada vez que se crea un objeto, incrementamos el contador de la clase
Usuario.#totalUsuariosRegistrados++;
}
// 2. Getter Estático para consultar el total
static get totalRegistrados() {
return Usuario.#totalUsuariosRegistrados;
}
// 3. Método Estático Factoría (Factory Method)
static crearInvitado() {
const idAleatorio = Math.floor(1000 + Math.random() * 9000);
return new Usuario(`Invitado_${idAleatorio}`, "[email protected]", "invitado");
}
// 4. Método Estático Utilitario (Validador de email)
static esEmailValido(email) {
return typeof email === 'string' && email.includes('@') && email.includes('.');
}
obtenerPerfil() {
return `[${this.rol.toUpperCase()}] ${this.nombre} (${this.email})`;
}
}
// ==========================================
// PRUEBA EN EL SANDBOX (Sin instanciar primero)
// ==========================================
console.log("=== UTILIDADES ESTÁTICAS ===");
console.log("¿'[email protected]' es válido?:", Usuario.esEmailValido("[email protected]")); // true
console.log("¿'correo-falso' es válido?:", Usuario.esEmailValido("correo-falso")); // false
console.log("Rol por defecto de la plataforma:", Usuario.ROL_DEFAULT);
console.log("\n=== CREACIÓN DE INSTANCIAS ===");
const u1 = new Usuario("Carlos Mendoza", "[email protected]", "admin");
const u2 = new Usuario("Valeria Torres", "[email protected]");
const u3 = Usuario.crearInvitado(); // Usando el método factoría estático
console.log(u1.obtenerPerfil());
console.log(u2.obtenerPerfil());
console.log(u3.obtenerPerfil());
console.log("\n=== CONTADOR GLOBAL ESTÁTICO ===");
console.log(`Total de usuarios vivos en memoria: ${Usuario.totalRegistrados}`);
Haz clic para editar este código