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'
}