"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 > Você pode chamar um construtor de classe sem 'novo' no ES6?

Você pode chamar um construtor de classe sem 'novo' no ES6?

Publicado em 2024-11-07
Navegar:478

 Can You Call a Class Constructor Without \'new\' in ES6?

Chamar construtor de classe sem nova palavra-chave no ES6

Dada a definição da classe:

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

Não é possível chamar diretamente o construtor da classe sem a palavra-chave new. Isso ocorre porque as classes no ES6 têm inerentemente uma função construtora que é invocada quando a classe é chamada.

Invocar uma classe sem new resulta em um erro:

Cannot call a class as a function

Esta mensagem de erro indica claramente que o construtor da classe só pode ser chamado com o operador new, que é necessário para criar uma nova instância da classe.

Para superar essa limitação, considere as seguintes abordagens :

  • Use uma função regular:
function Foo(x) {
  this.x = x;
  this.hello = function() {
    return `hello ${this.x}`;
  }
}
  • Sempre chame a classe com new:
(new Foo("world")).hello(); // "hello world"
  • Envolva a classe em uma função e chame com new:
var FooWrapper = function(...args) { return new Foo(...args) };
FooWrapper("world").hello(); // "hello world"
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