Esta tradução está incompleta. Por favor, ajude a traduzir este artigo.

A propriedade new.target 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 new , new.target retorna a referência ao  construtor ou função. Em chamadas normais de funções , new.target é undefined.

Sintaxe

new.target

Descrição

A sintaxe new.target consiste na palavra- chave "new", o ponto, e o nome da propriedade "target". Normalmente "new." serve como um contexto para a propriedade de acesso, mas aqui  "new." não é exatamente um objeto. Em chamadas de construtores, entretanto, new.target se refere ao construtor invocado pelo new e então "new." se torna um contexto virtual.

new.target  é uma propriedade meta que é disponibilizada para todas as funções. Em funções do tipo flecha =>, new.target se refere ao new.target em torno da função.

Exemplos

new.target em chamadas de Função

Em chamadas normais de função  (diferente de chamadas a funções do tipo construtor), new.target é undefined. Isso permite que você detecte se a função foi chamada como um novo construtor.

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"

new.target em Construtores

Em classes construtoras, new.target se refere ao construtor que foi diretamente invocado pelo new. Isto também é o caso se o construtor é uma classe pai e foi delegado pelo construtor de um filho.

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();}}

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.

Especificações

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Built-in Function Objects' in that specification.
Padrão Definição inicial.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Built-in Function Objects' in that specification.
Rascunho  

Compatibilidade com browser

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Basic supportChrome Full support 46Edge Full support YesFirefox Full support 41IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support 46Chrome Android Full support 46Edge Mobile Full support YesFirefox Android Full support 41Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 5.0nodejs Full support 5.0.0

Legend

Full support  
Full support
No support  
No support

Veja também

Etiquetas do documento e colaboradores

Colaboradores desta página: SauloNunes, LucasGabrielSI
Última atualização por: SauloNunes,