"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 > Pouvez-vous appeler un constructeur de classe sans « nouveau » dans ES6 ?

Pouvez-vous appeler un constructeur de classe sans « nouveau » dans ES6 ?

Publié le 2024-11-07
Parcourir:927

 Can You Call a Class Constructor Without \'new\' in ES6?

Appeler le constructeur de classe sans nouveau mot-clé dans ES6

Étant donné la définition de la classe :

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

Il n'est pas possible d'appeler directement le constructeur de classe sans le mot-clé new. En effet, les classes dans ES6 ont intrinsèquement une fonction constructeur qui est invoquée lorsque la classe est appelée.

L'appel d'une classe sans nouveau entraîne une erreur :

Cannot call a class as a function

Ce message d'erreur indique clairement que le constructeur de classe ne peut être appelé qu'avec l'opérateur new, qui est requis pour créer une nouvelle instance de la classe.

Pour surmonter cette limitation, considérez les approches suivantes :

  • Utilisez plutôt une fonction régulière :
function Foo(x) {
  this.x = x;
  this.hello = function() {
    return `hello ${this.x}`;
  }
}
  • Toujours appeler la classe avec new:
(new Foo("world")).hello(); // "hello world"
  • Enveloppez la classe dans une fonction et appelez-la avec new :
var FooWrapper = function(...args) { return new Foo(...args) };
FooWrapper("world").hello(); // "hello world"
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