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
Libérer: 2024-10-26 02:27:27
original
621 Les gens l'ont consulté

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>
Copier après la connexion

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

Cannot call a class as a function
Copier après la connexion

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>
Copier après la connexion

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

FooWithoutNew("world").hello(); // "hello world"
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal