This translation is incomplete. Please help translate this article from English
A palavra-chave static define um método estático para uma classe.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
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:
- Como implementar um método estático numa classe.
- Que se podem criar sub-classes a partir de uma classe com um membro estático (e usá-los).
- 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 (ECMA-262) The definition of 'Definições de Classe' in that specification. |
Living Standard |
Compatibilidade de browsers
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
static | Chrome
Full support
49
| Edge Full support 13 | Firefox Full support 45 | IE No support No | Opera
Full support
36
| Safari Full support 9 | WebView Android
Full support
49
| Chrome Android
Full support
49
| Firefox Android Full support 45 | Opera Android
Full support
36
| Safari iOS Full support 9 | Samsung Internet Android
Full support
5.0
| nodejs
Full support
6.0.0
|
Legend
- Full support
- Full support
- No support
- No support
- See implementation notes.
- See implementation notes.
- User must explicitly enable this feature.
- User must explicitly enable this feature.

