Esta tradução está incompleta. Por favor, ajude a traduzir este artigo do Inglês.

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

Especificação Estado Comentário
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Definições de Classe' in that specification.
Standard Definição inicial.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Definições de Classe' in that specification.
Draft  

Compatibilidade de browsers

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support4911345 No439
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support ? Yes1345 ?9 ?

1. From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".

Ver também

Etiquetas do documento e contribuidores

 Contribuidores para esta página: Painatalman
 Última atualização por: Painatalman,