diff options
Diffstat (limited to 'files/pt-br/web/javascript/reference/operators/new.target/index.html')
-rw-r--r-- | files/pt-br/web/javascript/reference/operators/new.target/index.html | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/files/pt-br/web/javascript/reference/operators/new.target/index.html b/files/pt-br/web/javascript/reference/operators/new.target/index.html new file mode 100644 index 0000000000..e932b452ed --- /dev/null +++ b/files/pt-br/web/javascript/reference/operators/new.target/index.html @@ -0,0 +1,98 @@ +--- +title: new.target +slug: Web/JavaScript/Reference/Operators/new.target +tags: + - Classes + - ECMAScript6 + - JavaScript + - Referencia +translation_of: Web/JavaScript/Reference/Operators/new.target +--- +<div>{{JSSidebar("Operators")}}</div> + +<p>A propriedade <code>new.target</code> permite que você detecte quando uma função ou construtor foi chamado utilizando o operador new. Em construtores e funções instaciadas com o operador <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new">new</a> , <code>new.target</code> retorna a referência ao construtor ou função. Em chamadas normais de funções , <code>new.target</code> é {{jsxref("undefined")}}.</p> + +<h2 id="Sintaxe">Sintaxe</h2> + +<pre class="syntaxbox">new.target</pre> + +<h2 id="Descrição">Descrição</h2> + +<p>A sintaxe <code>new.target</code> consiste na palavra- chave <code>"new</code>", o ponto, e o nome da propriedade <code>"target"</code>. Normalmente "<code>new."</code> serve como um contexto para a propriedade de acesso, mas aqui <code>"new."</code> não é exatamente um objeto. Em chamadas de construtores, entretanto, <code>new.target</code> se refere ao construtor invocado pelo <code>new</code> e então "<code>new.</code>" se torna um contexto virtual.</p> + +<p><code>new.target</code> é uma propriedade meta que é disponibilizada para todas as funções. Em funções do tipo flecha <code>=></code>, <code>new.target</code> se refere ao <code>new.target</code> em torno da função.</p> + +<h2 id="Exemplos">Exemplos</h2> + +<h3 id="new.target_em_chamadas_de_Função">new.target em chamadas de Função</h3> + +<p>Em chamadas normais de função (diferente de chamadas a funções do tipo construtor), <code>new.target</code> é {{jsxref("undefined")}}. Isso permite que você detecte se a função foi chamada como um novo construtor.</p> + +<pre class="brush: js">function Foo() { + if (!new.target) throw 'Foo() must be called with new'; + console.log('Foo instanciado com new'); +} + +Foo(); // throws "Foo() must be called with new" +new Foo(); // logs "Foo instanciado com new" +</pre> + +<h3 id="new.target_em_Construtores">new.target em Construtores</h3> + +<p>Em classes construtoras, <code>new.target</code> se refere ao construtor que foi diretamente invocado pelo <code>new</code>. Isto também é o caso se o construtor é uma classe pai e foi delegado pelo construtor de um filho.</p> + +<pre class="brush: js">class A { + constructor() { + console.log(new.target.name); + } +} + +class B extends A { constructor() { super(); } } + +var a = new A(); // logs "A" +var b = new B(); // logs "B" + +class C { constructor() { console.log(new.target); } } +class D extends C { constructor() { super(); } } + +var c = new C(); // logs class C{constructor(){console.log(new.target);}} +var d = new D(); // logs class D extends C{constructor(){super();}}</pre> + +<p class="summary">A partir do exemplo acima das classes C e D, mostra que new.target aponta para a definição da classe na qual foi inicializada. Exemplo, quando D foi inicializado utilizando new, a definição da classe D foi impressa e similiarmente ao caso de C, a classe C foi impressa.</p> + +<h2 id="Especificações">Especificações</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + <tr> + <td>{{SpecName('ES2015', '#sec-built-in-function-objects', 'Built-in Function Objects')}}</td> + <td>{{Spec2('ES2015')}}</td> + <td>Definição inicial.</td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-built-in-function-objects', 'Built-in Function Objects')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td> </td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilidade_com_browser">Compatibilidade com browser</h2> + +<div class="hidden">A tabela de compatibilidade nesta página é gerada de dados estruturados. se você deseja contribuir para os dados, por favor acesse <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> e nos envie uma requisição de atualização.</div> + +<p>{{Compat("javascript.operators.new_target")}}</p> + +<h2 id="Veja_também">Veja também</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions">funções</a></li> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Classes">Classes</a></li> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new">new</a></code></li> + <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">this</a></code></li> +</ul> |