"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo llamar a un constructor de clases ES6 sin la palabra clave \"nueva\"?

¿Cómo puedo llamar a un constructor de clases ES6 sin la palabra clave \"nueva\"?

Publicado el 2024-11-08
Navegar:344

How Can I Call an ES6 Class Constructor Without the \

Llamar a constructores de clases de ES6 sin "nuevo"

En ES6, las clases son azúcar sintáctico para funciones de constructor. Cuando se invoca una clase sin la nueva palabra clave, no se crea una nueva instancia de la clase. En su lugar, llama directamente a la función constructora de la clase.

Considere la siguiente clase:

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

Si intentamos llamar a esta clase sin la nueva palabra clave, obtenemos un error:

Cannot call a class as a function

Esto se debe a que los constructores de clases están diseñados para crear nuevas instancias de la clase. Invocarlos sin el operador new equivale a llamar a una función normal.

Para permitir llamar a un constructor de clase sin la palabra clave new, podemos usar una combinación de una función constructora y una función de flecha de la siguiente manera:

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

Ahora, podemos llamar al constructor de clases sin la nueva palabra clave usando FooWithoutNew:

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

Sin embargo, es importante tener en cuenta que este enfoque tiene algunos inconvenientes. En primer lugar, requiere la creación de una función separada, lo que puede resultar inconveniente. En segundo lugar, interrumpe el comportamiento del constructor de devolver una nueva instancia.

En general, se recomienda llamar siempre a los constructores de clases con la nueva palabra clave para mayor claridad y coherencia.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3