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!