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

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support46 Yes41 No Yes Yes
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support4646 Yes41 Yes Yes5.0

Veja também

Etiquetas do documento e colaboradores

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