Maison > Article > interface Web > Voici quelques options de titre qui suivent vos directives : Option 1 : Mettre l'accent sur le problème * Classes ES6 : pouvez-vous appeler un constructeur sans « nouveau » ? Option 2 : Se concentrer sur la solution * Workarou
ES6 : contourner le « nouveau » mot-clé pour l'invocation du constructeur de classe
Dans ES6, un constructeur de classe sert de corps à la classe elle-même . Cependant, il est obligatoire d'utiliser le mot-clé 'new' lors de l'appel d'une classe pour créer une instance. Cette exigence soulève la question de savoir s'il est possible de contourner le mot-clé 'new' lors de l'appel d'un constructeur de classe.
Pour comprendre la raison sous-jacente de la restriction, il est crucial d'approfondir la nature des constructeurs de classe. Contrairement aux fonctions classiques, le constructeur d'une classe fait partie intégrante de la définition de la classe et s'exécute toujours lorsque la classe est instanciée. Ce comportement découle du fait que la classe est intrinsèquement un constructeur.
Par conséquent, une tentative d'invocation d'une classe sans le mot-clé 'new' entraîne l'erreur suivante :
TypeError: Class constructors cannot be invoked without 'new'
Le message d'erreur est précis reflète l'exigence appliquée.
Pour obtenir la fonctionnalité souhaitée d'appel d'une classe sans le mot-clé 'new', plusieurs approches peuvent être envisagées :
Option 1 : Utiliser une fonction régulière
Au lieu d'une classe, une fonction régulière peut être utilisée pour obtenir un comportement similaire :
function Foo(x) { if (!(this instanceof Foo)) return new Foo(x); this.x = x; }
Option 2 : Application d'une utilisation cohérente des « nouveaux » mots clés
Imposer l'utilisation cohérente du mot-clé 'new' lors de l'appel de la classe reste une option valide.
Option 3 : Encapsuler la classe
Un classique La fonction wrapper peut être créée pour gérer à la fois les invocations « nouvelles » et non « nouvelles » en invoquant toujours la classe avec le mot-clé « new » :
class Foo { constructor(x) { this.x = x; } } var _old = Foo; Foo = function(...args) { return new _old(...args) };
En comprenant les mécanismes des constructeurs de classe et en explorant des approches alternatives , les développeurs peuvent naviguer efficacement dans les nuances des invocations de classe ES6.
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!