From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../javascript/reference/classes/static/index.html | 131 +++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 files/pt-pt/web/javascript/reference/classes/static/index.html (limited to 'files/pt-pt/web/javascript/reference/classes/static') diff --git a/files/pt-pt/web/javascript/reference/classes/static/index.html b/files/pt-pt/web/javascript/reference/classes/static/index.html new file mode 100644 index 0000000000..9cb5c48367 --- /dev/null +++ b/files/pt-pt/web/javascript/reference/classes/static/index.html @@ -0,0 +1,131 @@ +--- +title: static +slug: Web/JavaScript/Reference/Classes/static +translation_of: Web/JavaScript/Reference/Classes/static +--- +
{{jsSidebar("Classes")}}
+ +

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

+ +
{{EmbedInteractiveExample("pages/js/classes-static.html")}}
+ + + +

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. +
  3. Que se podem criar sub-classes a partir de uma classe com um membro estático (e usá-los).
  4. +
  5. Como se pode chamar um método estático (com contra-exemplos).
  6. +
+ +
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çãoEstadoComentá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')}} 
+ +

Compatibilidade de browsers

+ + + +

{{Compat("javascript.classes.static")}}

+ +

Ver também

+ + -- cgit v1.2.3-54-g00ecf