diff options
Diffstat (limited to 'files/pt-pt/web/javascript/reference/classes/static/index.html')
-rw-r--r-- | files/pt-pt/web/javascript/reference/classes/static/index.html | 131 |
1 files changed, 131 insertions, 0 deletions
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 +--- +<div>{{jsSidebar("Classes")}}</div> + +<p>A palavra-chave <code><strong>static</strong></code> define um método estático para uma classe.</p> + +<div>{{EmbedInteractiveExample("pages/js/classes-static.html")}}</div> + + + +<h2 id="Síntaxe">Síntaxe</h2> + +<pre class="syntaxbox">static <em>nomeDoMetodo</em>() { ... }</pre> + +<h2 id="Descrição">Descrição</h2> + +<p>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.</p> + +<h2 id="Como_chamar_métodos_estáticos">Como chamar métodos estáticos</h2> + +<h3 id="Noutro_método_estático">Noutro método estático</h3> + +<p>Para chamar um método estático dentro de outro que pertença à mesma classe, pode-se usar a palavra-chave <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">this</a></code>.</p> + +<pre class="brush: js">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'</pre> + +<h3 id="No_construtor_de_classe_e_noutros_métodos">No construtor de classe e noutros métodos</h3> + +<p>Métodos estáticos não são acessíveis através da palavra-chave <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">this</a></code> quando dentro de métodos não-estáticos. É preciso chamá-los ou através do nome da própria classe: <code>CLASSNAME.STATIC_METHOD_NAME()</code> ou como propriedade do construtor da classe: <code>this.constructor.STATIC_METHOD_NAME()</code>.</p> + +<pre class="brush: js">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.'; + } +}</pre> + +<h2 id="Exemplos">Exemplos</h2> + +<p>Os seguintes exemplos demonstram:</p> + +<ol> + <li>Como implementar um método estático numa classe.</li> + <li>Que se podem criar sub-classes a partir de uma classe com um membro estático (e usá-los).</li> + <li>Como se pode chamar um método estático (com contra-exemplos).</li> +</ol> + +<pre class="brush: js">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) +</pre> + +<h2 id="Especificações">Especificações</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Especificação</th> + <th scope="col">Estado</th> + <th scope="col">Comentário</th> + </tr> + <tr> + <td>{{SpecName('ES2015', '#sec-class-definitions', 'Definições de Classe')}}</td> + <td>{{Spec2('ES2015')}}</td> + <td>Definição inicial.</td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-class-definitions', 'Definições de Classe')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td> </td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilidade_de_browsers">Compatibilidade de browsers</h2> + + + +<p>{{Compat("javascript.classes.static")}}</p> + +<h2 id="Ver_também">Ver também</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/class">expressão <code>class</code></a></li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/class">declaração <code>class</code></a></li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Classes">Classes</a></li> +</ul> |