Miembros Estáticos: static, Bloques de Inicialización y Métodos Utilitarios
Aprende a definir propiedades y métodos que pertenecen a la clase en sí y no a las instancias, ideales para utilidades, constantes y factorías con static.
¿Qué es un Miembro Estático?
Hasta ahora, todas las propiedades y métodos que hemos visto pertenecían a las instancias individuales creadas con new (cada usuario tenía su propio nombre y saldo).
Un miembro marcado con static pertenece a la Clase en sí misma. No requiere crear ningún objeto con new para ser utilizado:
class Calculadora {
static sumar(a, b) {
return a + b;
}
}
// Invocación directa sin "new":
console.log(Calculadora.sumar(10, 5)); // 15
Ejemplos nativos que usas todos los días en JavaScript: Math.round(), Object.keys(), Array.isArray() o Date.now().
Casos de Uso Principales de `static`
| Patrón de Uso | Descripción | Ejemplo de Llamada |
|---|---|---|
| Funciones Utilitarias | Cálculos matemáticos, validadores de formato o conversiones que no dependen del estado de un objeto. | Conversor.celsiusAFahrenheit(30); |
| Métodos Factoría | Crear instancias especializadas con parámetros preconfigurados de forma más legible que el constructor. | Usuario.crearAnonimo(); |
| Contadores Globales | Llevar la cuenta de cuántas instancias se han creado en total durante la ejecución. | ConexionDB.totalConexiones; |
¿A qué apunta `this` dentro de un método `static`?
this NO hace referencia a una instancia (porque no existe ninguna). En su lugar, this apunta a la propia clase constructora.
⚡ Clase Utilitaria y Factoría de Usuarios con Métodos Estáticos
Ejecuta el código en el Sandbox y observa cómo se invocan los métodos directamente desde la clase:
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}`);
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección¿Cómo se debe invocar un método declarado con la palabra clave "static" dentro de una clase llamada Matematicas?
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.🚀 ¿Quieres dominar Manual de Programación Orientada a Objetos en JavaScript (POO) y crear proyectos reales?
Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.
🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.