--- title: static slug: Web/JavaScript/Reference/Classes/static translation_of: Web/JavaScript/Reference/Classes/static ---
A palavra-chave static define um método estático para uma classe.
static nomeDoMetodo() { ... }
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.
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'
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.';
}
}
Os seguintes exemplos demonstram:
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ção | Estado | Comentário |
|---|---|---|
| {{SpecName('ES2015', '#sec-class-definitions', 'Definições de Classe')}} | {{Spec2('ES2015')}} | Definição inicial. |
| {{SpecName('ESDraft', '#sec-class-definitions', 'Definições de Classe')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.classes.static")}}