Maison > interface Web > js tutoriel > Comment appeler des classes ES6 sans le mot clé « nouveau » ?

Comment appeler des classes ES6 sans le mot clé « nouveau » ?

Susan Sarandon
Libérer: 2024-10-26 03:18:02
original
521 Les gens l'ont consulté

 How to Invoke ES6 Classes Without the `new` Keyword?

ES6 : contourner le nouveau mot-clé pour l'invocation du constructeur de classe

Dans ES6, les classes servent non seulement de modèles pour les objets, mais incarnent également leurs constructeurs . La fonction constructor() sert de corps de classe et son exécution est déclenchée lorsque la classe est invoquée. Cependant, tenter d'appeler une classe sans le nouveau mot-clé requis entraîne souvent le message d'erreur « Impossible d'appeler une classe en tant que fonction ».

Comprendre l'impératif du constructeur

Les classes sont intrinsèquement liées à l'opérateur new, qui garantit qu'une nouvelle instance de la classe est créée lors de l'instanciation. Invoquer une classe sans new va à l'encontre de ce principe de conception, conduisant à l'erreur susmentionnée.

Solutions alternatives

Si le comportement souhaité est d'autoriser l'invocation de classe avec ou sans new , plusieurs alternatives existent :

1. Utiliser une fonction régulière au lieu d'une classe

Une fonction régulière peut imiter un comportement de classe sans la nouvelle exigence. Il peut toujours appliquer un comportement de type instance en utilisant cela, mais il lui manque les fonctionnalités d'encapsulation et d'héritage des classes.

<code class="js">function Foo(x) {
  this.x = x;
  this.hello = function() {
    return this.x;
  };
}</code>
Copier après la connexion

2. Application du nouveau mot-clé

Si le but recherché est de toujours invoquer la classe avec new, aucune solution de contournement n'est nécessaire. Respectez simplement le modèle d'invocation du constructeur recommandé :

<code class="js">(new Foo("world")).hello(); // "hello world"</code>
Copier après la connexion

3. Envelopper la classe avec une fonction régulière

Cette approche offre la flexibilité d'invoquer la classe avec ou sans new tout en conservant les avantages de l'utilisation des classes. La fonction d'emballage appelle toujours le constructeur de classe avec new.

<code class="js">class Foo {
  constructor(x) { this.x = x; }
  hello() { return `hello ${this.x}`; }
}

var _old = Foo;
Foo = function(...args) { return new _old(...args) };

Foo("world").hello();       // "hello world"
(new Foo("world")).hello(); // Also works</code>
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