Maison >interface Web >js tutoriel >Comment puis-je appeler un constructeur de classe ES6 sans le mot clé « nouveau » ?

Comment puis-je appeler un constructeur de classe ES6 sans le mot clé « nouveau » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 02:27:27619parcourir

How Can I Call an ES6 Class Constructor Without the

Appel des constructeurs de classe ES6 sans "nouveau"

Dans ES6, les classes sont du sucre syntaxique pour les fonctions de constructeur. Lorsqu'une classe est invoquée sans le mot-clé new, elle ne crée pas de nouvelle instance de la classe. Au lieu de cela, il appelle directement la fonction constructeur de la classe.

Considérez la classe suivante :

<code class="javascript">class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}</code>

Si nous essayons d'appeler cette classe sans le nouveau mot-clé, nous obtenons une erreur :

Cannot call a class as a function

Cela est dû au fait que les constructeurs de classe sont conçus pour créer de nouvelles instances de la classe. Les invoquer sans l'opérateur new équivaut à appeler une fonction normale.

Pour permettre l'appel d'un constructeur de classe sans le nouveau mot-clé, nous pouvons utiliser une combinaison d'une fonction constructeur et d'une fonction flèche comme suit :

<code class="javascript">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);</code>

Maintenant, nous pouvons appeler le constructeur de classe sans le nouveau mot-clé en utilisant FooWithoutNew :

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

Cependant, il est important de noter que cette approche présente certains inconvénients. Premièrement, cela nécessite de créer une fonction distincte, ce qui peut être gênant. Deuxièmement, cela interrompt le comportement du constructeur consistant à renvoyer une nouvelle instance.

En général, il est recommandé de toujours appeler les constructeurs de classe avec le nouveau mot-clé pour plus de clarté et de cohérence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn