8.1 Declaración de métodos estáticos
Los métodos estáticos en JavaScript son métodos que se definen en la clase en sí, y no en sus instancias. Se llaman directamente en la clase, y no en los objetos creados por esa clase. Los métodos estáticos se utilizan a menudo para crear funciones auxiliares que están relacionadas con la clase, pero no con objetos concretos.
Métodos estáticos se declaran utilizando la palabra clave static
antes de la definición
del método en el cuerpo de la clase.
Ejemplo:
- Los métodos
add
ymultiply
están declarados como estáticos utilizando la palabra clavestatic
- Estos métodos se llaman directamente en la clase
MathHelper
, y no en sus instancias
class MathHelper {
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(MathHelper.add(5, 3)); // 8
console.log(MathHelper.multiply(5, 3)); // 15
8.2 Uso de métodos estáticos
Los métodos estáticos son útiles en los siguientes escenarios:
- Funciones auxiliares: los métodos estáticos pueden utilizarse para crear funciones utilitarias que realizan operaciones relacionadas con la clase.
- Métodos de fábrica: los métodos estáticos pueden utilizarse para crear instancias de la clase con una lógica específica.
- Procesamiento de datos: los métodos estáticos pueden utilizarse para procesar datos relacionados con la clase, pero que no requieren la creación de instancias de la clase.
Ejemplo de funciones auxiliares:
- La clase
StringUtil
contiene métodos estáticoscapitalize
yreverse
, que trabajan con cadenas - Estos métodos se llaman directamente en la clase
StringUtil
class StringUtil {
static capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
static reverse(str) {
return str.split('').reverse().join('');
}
}
console.log(StringUtil.capitalize('hello')); // "Hello"
console.log(StringUtil.reverse('hello')); // "olleh"
Ejemplo de método de fábrica:
El método estático fromObject
crea una instancia de la clase Car
a partir de un objeto de datos.
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
}
static fromObject(obj) {
return new Car(obj.brand, obj.model);
}
}
const carData = { brand: 'Toyota', model: 'Camry' };
const car = Car.fromObject(carData);
console.log(car.brand); // "Toyota"
console.log(car.model); // "Camry"
8.3 Métodos estáticos y herencia
En JavaScript, los métodos estáticos también se heredan por clases derivadas. Las clases derivadas pueden utilizar los métodos estáticos de la clase base o sobrescribirlos.
Ejemplo de herencia de métodos estáticos:
- El método estático
identify
está definido en la claseAnimal
y sobrescrito en la claseDog
- Se llama al método
identify
en ambas clases
class Animal {
static identify() {
return 'This is an animal';
}
}
class Dog extends Animal {
static identify() {
return 'This is a dog';
}
}
console.log(Animal.identify()); // "This is an animal"
console.log(Dog.identify()); // "This is a dog"
8.4 Acceso a métodos estáticos dentro de otros métodos
Los métodos estáticos pueden ser llamados dentro de otros métodos de la clase usando el nombre de la clase.
Ejemplo:
El método estático calculateArea
se llama dentro de otro método estático describeCircle
utilizando la palabra clave this
, que en este contexto se refiere a la clase Geometry
en sí.
class Geometry {
static calculateArea(radius) {
return Math.PI * radius * radius;
}
static describeCircle(radius) {
const area = this.calculateArea(radius);
return `A circle with radius ${radius} has an area of ${area.toFixed(2)}.`;
}
}
console.log(Geometry.describeCircle(5)); // "A circle with radius 5 has an area of 78.54."
8.5 Métodos estáticos e instancias de clase
Los métodos estáticos no pueden ser llamados en instancias de la clase. Intentar llamar a un método estático en una instancia resultará en un error.
Ejemplo:
El método estático add
se llama en la clase Calculator
, y no en su instancia calc
.
class Calculator {
static add(a, b) {
return a + b;
}
}
const calc = new Calculator();
console.log(Calculator.add(3, 4)); // 7
console.log(calc.add(3, 4)); // Error: calc.add no es una función
GO TO FULL VERSION