Propiedades y Métodos Estáticos en Clases de JavaScript
En JavaScript, las propiedades y métodos estáticos pertenecen a la clase misma, no a sus instancias. Esto significa que pueden ser accedidos directamente desde la clase sin necesidad de crear un objeto. Son útiles para definir funciones y valores que son compartidos por todas las instancias, pero que no dependen de ninguna en particular.
En este artículo, exploraremos qué son los métodos y propiedades estáticos, cómo se definen y los casos en los que son útiles en el desarrollo de aplicaciones.
¿Qué son las Propiedades y Métodos Estáticos?
Un método estático es una función asociada a una clase, pero no a los objetos creados a partir de esa clase. De forma similar una propiedad estática es un valor compartido por la clase y accesible desde ella, no desde sus instancias.
Definición de un método estático
Para definir un método estático, usa la palabra clave static
antes del nombre del método.
class Matematica {
static sumar(a, b) {
return a + b;
}
}
console.log(Matematica.sumar(5, 10));
El método sumar
es estático y se invoca directamente a través de la clase Matematica
, sin necesidad de crear una instancia.
Características de los Métodos y Propiedades Estáticos
- No Acceden a
this
de la Instancia: Como los métodos estáticos no están vinculados a instancias específicas, no pueden acceder a las propiedades o métodos que dependen dethis
de la instancia. - Se Invocan Directamente en la Clase: Tanto las propiedades como los métodos estáticos se acceden a través de la clase y no a través de los objetos creados con la clase.
- Uso Común para Funcionalidades Compartidas: Los métodos y propiedades estáticos son ideales para funciones utilitarias o valores constantes que son relevantes para la clase en su totalidad, pero no para instancias específicas.
Propiedades Estáticas en Clases
A partir de ES2022 JavaScript permite definir propiedades estáticas de manera más sencilla dentro de la clase. Esto se hace utilizando la palabra clave static
antes de la definición de la propiedad.
Ejemplo de Propiedad Estática
class Configuracion {
static MAX_USUARIOS = 100;
}
console.log(Configuracion.MAX_USUARIOS);
En este caso MAX_USUARIOS
es una propiedad estática que pertenece a la clase Configuracion
. Al ser estática no puede ser accedida a través de instancias de la clase.
Cuándo Usar Métodos y Propiedades Estáticos
Los métodos y propiedades estáticos son útiles en varios escenarios:
- Funciones Utilitarias o Helper Functions: Métodos como
Math.max()
oMath.random()
son ejemplos clásicos de funciones utilitarias implementadas como métodos estáticos. - Constantes Compartidas: Puedes definir valores constantes que sean relevantes para la clase, como el número máximo de conexiones permitidas o una configuración global.
- Control de Estado Compartido: Si necesitas mantener un estado compartido por todas las instancias, las propiedades estáticas pueden ser una solución efectiva.
Ejemplo: Uso de Métodos Estáticos para Funciones Utilitarias
class Conversor {
static celsiusAFahrenheit(celsius) {
return celsius * 9 / 5 + 32;
}
static fahrenheitACelsius(fahrenheit) {
return (fahrenheit - 32) * 5 / 9;
}
}
console.log(Conversor.celsiusAFahrenheit(30));
console.log(Conversor.fahrenheitACelsius(86));
En este ejemplo los métodos estáticos celsiusAFahrenheit
y fahrenheitACelsius
convierten temperaturas y no requieren una instancia de la clase para su uso.
Acceso a Propiedades Estáticas desde Métodos Estáticos
Los métodos estáticos pueden acceder a otras propiedades y métodos estáticos usando this
, que en este contexto se refiere a la clase.
Ejemplo:
class Banco {
static tasaInteres = 0.05;
static calcularInteres(monto) {
return monto * Banco.tasaInteres;
}
}
console.log(Banco.calcularInteres(1000));
En este ejemplo el método estático calcularInteres
accede a la propiedad estática tasaInteres
para realizar un cálculo. Veamos un ejemplo donde combinamos métodos y propiedades estáticas para modelar un sistema de configuración.
class Sistema {
static VERSION = '1.0.0';
static MAX_CONEXIONES = 10;
static obtenerInfo() {
return `Versión: ${this.VERSION}, Máx. Conexiones: ${this.MAX_CONEXIONES}`;
}
}
console.log(Sistema.obtenerInfo());
En el código anterior VERSION
y MAX_CONEXIONES
son propiedades estáticas de la clase ConfiguracionSistema
, y el método obtenerInfo()
proporciona información relevante sobre el sistema.
Limitaciones de los Métodos y Propiedades Estáticos
- No Acceden a las Propiedades de Instancia: Los métodos estáticos no pueden usar
this
para acceder a propiedades de las instancias. Son útiles solo para funcionalidades que no dependen de la instancia. - No se Heredan Automáticamente: Si una clase hija extiende de una clase con métodos o propiedades estáticas, estas no se heredan automáticamente. Es necesario acceder a ellas directamente desde la clase padre.
class Padre {
static mensaje() {
return 'Soy estático en Padre';
}
}
class Hijo extends Padre {}
console.log(Hijo.mensaje());
Buenas prácticas
- Usa métodos estáticos para lógica no específica de instancias: Ideal para funciones utilitarias, cálculos compartidos o valores constantes.
- Evita abusar de los métodos estáticos: Usa instancias y métodos de instancia cuando necesites trabajar con datos específicos de objetos.
- Organiza las propiedades estáticas: Colócalas al inicio de la clase para mayor claridad.
- Documenta el propósito de los métodos estáticos: Deja claro en los comentarios cuándo y por qué un método debe ser estático.
Conclusión
Las propiedades y métodos estáticos son herramientas poderosas para agregar funcionalidades compartidas a las clases en JavaScript. Son útiles para crear funciones utilitarias, mantener valores constantes y manejar estados compartidos. Sin embargo, deben usarse con moderación y no como sustituto de la lógica basada en instancias.
En el próximo artículo exploraremos el uso de Expresiones de Clase en JavaScript, una forma alternativa y flexible de definir clases.