Esta página foi traduzida do inglês pela comunidade. Saiba mais e junte-se à comunidade MDN Web Docs.

View in English Always switch to English

new.target

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨setembro de 2017⁩.

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.

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"

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.

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

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
ECMAScript® 2026 Language Specification
# sec-built-in-function-objects

Compatibilidade com navegadores

Veja também