Propiedades y Métodos Estáticos en Clases de JavaScript
En JavaScript, las propiedades y métodos estáticos son aquellos que pertenecen a la clase en sí, en lugar de a sus instancias. Esto significa que pueden ser accedidos directamente desde la clase sin necesidad de crear un objeto a partir de ella. Este concepto es útil para definir funciones y valores que son compartidos por todas las instancias de la clase, pero que no dependen de ninguna instancia 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.
Definir un Método Estático
Para definir un método estático, se utiliza 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));
15
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);
100
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));
86
30
En este ejemplo los métodos estáticos celsiusAFahrenheit
y fahrenheitACelsius
convierten temperaturas y no requieren una instancia de la clase para su uso.
Accediendo a Propiedades Estáticas dentro de Métodos Estáticos
Un método estático puede acceder a otras propiedades o métodos estáticos de la misma clase utilizando la palabra clave this
, que en este contexto se refiere a la clase en sí.
Ejemplo: Acceder a Propiedades Estáticas desde Métodos Estáticos
class Banco {
static tasaInteres = 0.05;
static calcularInteres(monto) {
return monto * Banco.tasaInteres;
}
}
console.log(Banco.calcularInteres(1000));
50
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 ConfiguracionSistema {
static VERSION = '1.0.0';
static MAX_CONEXIONES = 10;
static obtenerInfo() {
return `Versión: ${this.VERSION}, Máx. Conexiones: ${this.MAX_CONEXIONES}`;
}
}
console.log(ConfiguracionSistema.obtenerInfo());
// Accediendo directamente a propiedades estáticas
console.log(ConfiguracionSistema.VERSION);
"Versión: 1.0.0, Máx. Conexiones: 10"
"1.0.0"
En este ejemplo, 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 y Precauciones con 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.
- Uso Moderado: Aunque son útiles, los métodos y propiedades estáticos no deben reemplazar la lógica basada en instancias ya que esto puede llevar a un diseño menos orientado a objetos.
Conclusión
Las propiedades y métodos estáticos en JavaScript son herramientas útiles para definir funcionalidades que no dependen de las instancias de una clase. Ofrecen una forma conveniente de implementar funciones utilitarias, mantener valores constantes y controlar estados compartidos. Sin embargo, es importante usarlos con moderación y tener en cuenta sus limitaciones, especialmente cuando se trabaja con herencia.
En el próximo artículo, exploraremos el uso de Expresiones de Clase en JavaScript, una forma alternativa y flexible de definir clases.