"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 » ?

Publié le 2024-11-08
Parcourir:631

How Can I Call an ES6 Class Constructor Without the \

Appel de 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 :

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

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

Cannot call a class as a function

C'est parce 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 :

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

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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3