Introdução à metapropriedade new.target do JavaScript

Resumo : neste tutorial, você aprende sobre a new.targetmetapropriedade JavaScript que detecta se uma função ou construtor foi chamado usando o newoperador.

Introdução ao JavaScript new.target

JavaScript novo.target

ES6 fornece uma metapropriedade chamada new.targetque permite detectar se uma função ou construtor foi chamado usando o newoperador.

O new.targetconsiste na newpalavra-chave, um ponto e targetuma propriedade. O new.targetestá disponível em todas as funções.

Porém, em funções de seta , new.target é aquele que pertence à função circundante.

É new.targetmuito ú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 newoperador de uma classe pai.

JavaScript new.target em funções

Vamos ver a seguinte Personfunção construtora:

function Person(name) {
    this.name = name;
}Linguagem de código:  JavaScript  ( javascript )

Você pode criar um novo objeto a partir da Personfunção usando o newoperador da seguinte maneira:

let john = new Person('John');
console.log(john.name); // johnLinguagem de código:  JavaScript  ( javascript )

Ou você pode chamar Personcomo uma função:

Person('Lily');Linguagem de código:  JavaScript  ( javascript )

Como thisé definido para o objeto global , ou seja, o windowobjeto quando você executa JavaScript no navegador da web, a namepropriedade é adicionada ao windowobjeto da seguinte forma:

console.log(window.name); //LilyLinguagem de código:  JavaScript  ( javascript )

Para ajudar a detectar se uma função foi chamada usando o operador new, você usa a new.targetmetapropriedade.

Em uma chamada de função regular, o new.targetretorno é undefined. Se a função foi chamada com o newoperador, new.targetretorna uma referência à função.

Suponha que você não queira que Personseja chamado como uma função, você pode usar o new.targetseguinte:

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 newoperador. Se você tentar chamá-la como uma função normal, receberá um erro.

JavaScript new.target em construtores

Em um construtor de classe , new.targetrefere-se ao construtor que foi invocado diretamente pelo newoperador. É truese 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'); // EmployeeLinguagem 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.targetmetapropriedade JavaScript para detectar se uma função ou construtor foi chamado usando o newoperador.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *