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
BCD tables only load in the browser