Resumo : neste tutorial, você aprende sobre a new.target
metapropriedade JavaScript que detecta se uma função ou construtor foi chamado usando o new
operador.
Introdução ao JavaScript new.target
ES6 fornece uma metapropriedade chamada new.target
que permite detectar se uma função ou construtor foi chamado usando o new
operador.
O new.target
consiste na new
palavra-chave, um ponto e target
uma propriedade. O new.target
está disponível em todas as funções.
Porém, em funções de seta , new.targe
t é aquele que pertence à função circundante.
É new.target
muito útil inspecionar em tempo de execução se uma função está sendo executada como função ou como construtor. Também é útil determinar uma classe derivada específica que foi chamada usando o new
operador de uma classe pai.
JavaScript new.target em funções
Vamos ver a seguinte Person
função construtora:
function Person(name) {
this.name = name;
}
Linguagem de código: JavaScript ( javascript )
Você pode criar um novo objeto a partir da Person
função usando o new
operador da seguinte maneira:
let john = new Person('John');
console.log(john.name); // john
Linguagem de código: JavaScript ( javascript )
Ou você pode chamar Person
como uma função:
Person('Lily');
Linguagem de código: JavaScript ( javascript )
Como this
é definido para o objeto global , ou seja, o window
objeto quando você executa JavaScript no navegador da web, a name
propriedade é adicionada ao window
objeto da seguinte forma:
console.log(window.name); //Lily
Linguagem de código: JavaScript ( javascript )
Para ajudar a detectar se uma função foi chamada usando o operador new, você usa a new.target
metapropriedade.
Em uma chamada de função regular, o new.target
retorno é undefined
. Se a função foi chamada com o new
operador, new.target
retorna uma referência à função.
Suponha que você não queira que Person
seja chamado como uma função, você pode usar o new.target
seguinte:
function Person(name) {
if (!new.target) {
throw "must use new operator with Person";
}
this.name = name;
}
Linguagem de código: JavaScript ( javascript )
Agora, a única maneira de usar Person
é instanciar um objeto dele usando o new
operador. Se você tentar chamá-la como uma função normal, receberá um erro.
JavaScript new.target em construtores
Em um construtor de classe , new.target
refere-se ao construtor que foi invocado diretamente pelo new
operador. É true
se o construtor estiver na classe pai e foi delegado do construtor da classe filha:
class Person {
constructor(name) {
this.name = name;
console.log(new.target.name);
}
}
class Employee extends Person {
constructor(name, title) {
super(name);
this.title = title;
}
}
let john = new Person('John Doe'); // Person
let lily = new Employee('Lily Bush', 'Programmer'); // Employee
Linguagem de código: JavaScript ( javascript )
Neste exemplo, new.target.name
é o nome amigável da referência do construtor new.target
Neste tutorial, você aprendeu como usar a new.target
metapropriedade JavaScript para detectar se uma função ou construtor foi chamado usando o new
operador.