preloader

Propiedades y Métodos Estáticos en JavaScript

Propiedades y Métodos Estáticos en JavaScript

En JavaScript, podemos asignar métodos a toda una clase usando métodos estáticos. Estos métodos están marcados con la palabra clave static en la declaración de la clase:

				
					class Usuario {
  static metodoEstatico() {
    alert(this === Usuario);
  }
}

Usuario.metodoEstatico(); // Devuelve true

				
			

Este código realiza lo mismo que asignar directamente una función a la clase:

				
					class Usuario { }

Usuario.metodoEstatico = function() {
  alert(this === Usuario);
};

Usuario.metodoEstatico(); // Devuelve true

				
			

En ambos casos, this dentro de Usuario.metodoEstatico() hace referencia a la clase Usuario misma.

Los métodos estáticos son útiles para funciones que pertenecen a la clase en su totalidad y no a instancias individuales. Por ejemplo, en una clase Articulo, podríamos tener un método estático Articulo.comparar para comparar dos artículos según su fecha:

				
					class Articulo {
  constructor(titulo, fecha) {
    this.titulo = titulo;
    this.fecha = fecha;
  }

  static comparar(articuloA, articuloB) {
    return articuloA.fecha - articuloB.fecha;
  }
}

let articulos = [
  new Articulo("HTML", new Date(2019, 1, 1)),
  new Articulo("CSS", new Date(2019, 0, 1)),
  new Articulo("JavaScript", new Date(2019, 11, 1))
];

articulos.sort(Articulo.comparar);

alert(articulos[0].titulo); // Devuelve "CSS"

				
			

Aquí, Articulo.comparar actúa sobre la clase en general para ordenar los artículos por fecha.

Otro caso común es el uso de un método estático como una fábrica para crear instancias con configuraciones específicas, como Articulo.crearHoy():

				
					class Articulo {
  constructor(titulo, fecha) {
    this.titulo = titulo;
    this.fecha = fecha;
  }

  static crearHoy() {
    return new this("Resumen de hoy", new Date());
  }
}

let articulo = Articulo.crearHoy();

alert(articulo.titulo); // Devuelve "Resumen de hoy"

				
			

Aquí, Articulo.crearHoy() crea un artículo con el título «Resumen de hoy» y la fecha actual.

Es importante recordar que los métodos estáticos no están disponibles en instancias individuales de la clase. Por ejemplo, el siguiente código no funcionará:

				
					let articulo = new Articulo("Intro a JavaScript", new Date());
articulo.crearHoy(); // Error: articulo.crearHoy is not a function

				
			

Las propiedades estáticas también son posibles en JavaScript y se definen de la siguiente manera:

				
					class Articulo {
  static editor = "Juan Pérez";
}

alert(Articulo.editor); // Devuelve "Juan Pérez"

				
			

Esto es equivalente a asignar directamente a Articulo:

				
					Articulo.editor = "Juan Pérez";

				
			

Las propiedades y métodos estáticos se heredan en JavaScript. Por ejemplo, si tenemos una clase Animal con un método estático Animal.comparar y una propiedad estática Animal.planeta, estas son heredadas por clases que extienden Animal:

				
					class Animal {
  static planeta = "Tierra";

  static comparar(animalA, animalB) {
    return animalA.velocidad - animalB.velocidad;
  }
}

class Conejo extends Animal {
  esconder() {
    alert(`${this.nombre} se esconde!`);
  }
}

let conejos = [
  new Conejo("Blanco", 10),
  new Conejo("Negro", 5)
];

conejos.sort(Conejo.comparar);

alert(Conejo.planeta); // Devuelve "Tierra"

				
			

En resumen, los métodos estáticos y las propiedades estáticas en JavaScript son útiles para funcionalidades que pertenecen a la clase en general y no a instancias individuales, proporcionando una forma eficiente de organizar y operar sobre datos y comportamientos específicos de la clase.

Related Post

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *