static

A palavra-chave static define um método estático para uma classe.

Síntaxe

static nomeDoMetodo() { ... }

Descrição

Métodos estáticos são chamados diretamente na classe mas não em instâncias da mesma. Estes são regularmente utilizados para criar funções utilitárias.

Como chamar métodos estáticos

Noutro método estático

Para chamar um método estático dentro de outro que pertença à mesma classe, pode-se usar a palavra-chave this.

class StaticMethodCall {
  static staticMethod() {
    return 'Metodo estatico foi invocado';
  }
  static anotherStaticMethod() {
    return this.staticMethod() + ' dentro de outro';
  }
}
StaticMethodCall.staticMethod();
// 'Metodo estatico foi invocado'

StaticMethodCall.anotherStaticMethod();
// 'Metodo estatico foi invocado dentro de outro'

No construtor de classe e noutros métodos

Métodos estáticos não são acessíveis através da palavra-chave this quando dentro de métodos não-estáticos. É preciso chamá-los ou através do nome da própria classe: CLASSNAME.STATIC_METHOD_NAME() ou como propriedade do construtor da classe: this.constructor.STATIC_METHOD_NAME().

class StaticMethodCall {
  constructor() {
    console.log(StaticMethodCall.staticMethod());
    // 'metodo estatico foi invocado.'

    console.log(this.constructor.staticMethod());
    // 'metodo estatico foi invocado.'
  }

  static staticMethod() {
    return 'metodo estatico foi invocado.';
  }
}

Exemplos

Os seguintes exemplos demonstram:

  1. Como implementar um método estático numa classe.
  2. Que se podem criar sub-classes a partir de uma classe com um membro estático (e usá-los).
  3. Como se pode chamar um método estático (com contra-exemplos).
class Triple {
  static triple(n) {
    if (n === undefined) {
      n = 1;
    }
    return n * 3;
  }
}

class BiggerTriple extends Triple {
  static triple(n) {
    return super.triple(n) * super.triple(n);
  }
}

console.log(Triple.triple());        // 3
console.log(Triple.triple(6));       // 18

var tp = new Triple();

console.log(BiggerTriple.triple(3));
// 81 (não foi afetado pela instanciação do pai)

console.log(tp.triple());
// 'tp.triple is not a function'. (não é função)

Especificações

Compatibilidade de browsers

BCD tables only load in the browser

Ver também