Maison > interface Web > js tutoriel > Pouvez-vous appeler un constructeur de classe sans « nouveau » dans ES6 ?

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

Susan Sarandon
Libérer: 2024-10-26 01:55:02
original
361 Les gens l'ont consulté

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

Ce n'est pas possible pour appeler directement le constructeur de classe sans le nouveau mot-clé. 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
Copier après la connexion

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, envisagez les approches suivantes :

  • Utilisez plutôt une fonction normale :
function Foo(x) {
  this.x = x;
  this.hello = function() {
    return `hello ${this.x}`;
  }
}
Copier après la connexion
  • Toujours appeler la classe avec new :
(new Foo("world")).hello(); // "hello world"
Copier après la connexion
  • Enveloppez la classe dans une fonction et appelez avec new :
var FooWrapper = function(...args) { return new Foo(...args) };
FooWrapper("world").hello(); // "hello world"
Copier après la connexion

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