🥇 Classes, Static Members (elementos estáticos)

Las clases tienen componentes estáticos. Estos elementos no están asociados con una instancia particular de la clase. Pueden ser accedidos a través del constructor de la clase.

class MiClase {
  static x = 10;

  static imprimirX() {
    // para acceder a una propiedad estática utilizamos this dentro de un método estático
    console.log(`El valor de x es: ${this.x}`);
  }

  imprimirX() {
    // para acceder a una propiedad estática usamos el nombre de la clase dentro de un método de una instancia
    console.log(`El valor de x en una instancia es: ${MiClase.x}`);
  }
}

// para acceder a un método lo hacemos directamente desde la clase
MiClase.imprimirX();

// para acceder a una propiedad estática lo hacemos directamente desde la clase
console.log(`El valor obtenido de x es: ${MiClase.x}`);

const miClase = new MiClase();
miClase.imprimirX();

Salida…

El valor de x es: 10
El valor obtenido de x es: 10
El valor de x en una instancia es: 10

Los elementos estáticos pueden ser también public, protected y private.

class MiClase {
    private static x = 10;
}

console.log(MiClase.x); // <- esta linea generará un error
// Property 'x' is private and only accessible within class 'MiClase'.

Los métodos estáticos también se heredan.

class Base {
  static saludar() {
    console.log("Hola mundo");
  }
}

class Derivada extends Base {}

Derivada.saludar();
Hola mundo

🍿 Palabras reservadas en clases

Debido a que las clases son funciones que pueden ser invocadas con new, algunos nombres no pueden ser definidos como static, algunos ejemplos son: name, length y call.

class Base {
    static name = "S!"; // <- esta línea generara un error
    // Static property 'name' conflicts with built-in property 'Function.name' of constructor function 'Base'
}