"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso chamar um construtor de classe ES6 sem a palavra-chave “new”?

Como posso chamar um construtor de classe ES6 sem a palavra-chave “new”?

Publicado em 2024-11-08
Navegar:668

How Can I Call an ES6 Class Constructor Without the \

Chamando construtores de classe ES6 sem "novo"

No ES6, as classes são açúcar sintático para funções de construtor. Quando uma classe é invocada sem a palavra-chave new, ela não cria uma nova instância da classe. Em vez disso, ele chama a função construtora da classe diretamente.

Considere a seguinte classe:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

Se tentarmos chamar esta classe sem a palavra-chave new, obteremos um erro:

Cannot call a class as a function

Isso ocorre porque os construtores de classe são projetados para criar novas instâncias da classe. Invocá-los sem o operador new é equivalente a chamar uma função regular.

Para permitir chamar um construtor de classe sem a palavra-chave new, podemos usar uma combinação de uma função construtora e uma função de seta como segue:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

const FooWithoutNew = () => new Foo(...arguments);

Agora, podemos chamar o construtor da classe sem a palavra-chave new usando FooWithoutNew:

FooWithoutNew("world").hello(); // "hello world"

No entanto, é importante observar que essa abordagem tem algumas desvantagens. Primeiro, é necessária a criação de uma função separada, o que pode ser inconveniente. Em segundo lugar, ele quebra o comportamento do construtor de retornar uma nova instância.

Em geral, é recomendado sempre chamar os construtores de classe com a palavra-chave new para maior clareza e consistência.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3