Dans ES6, la possibilité de définir des classes anonymes fournit du sucre syntaxique pour les déclarations de classe. Bien que pratique, l'instanciation immédiate de telles classes peut entraîner une multitude de problèmes.
Lorsqu'une classe anonyme est instanciée immédiatement, JavaScript crée une nouvelle fonction constructeur et prototyper un objet de manière dynamique. Chaque évaluation de l'expression aboutit à une fonction constructeur et à un prototype distincts.
Cette pratique présente plusieurs inconvénients importants :
Manque de réutilisabilité :
Contrairement aux classes nommées, les classes anonymes immédiatement instanciées créent à chaque fois un nouveau constructeur et un nouveau prototype. Cela signifie que plusieurs instances ne partageront pas le même prototype, perdant ainsi les avantages de l'héritage de classe et du partage de prototype.
Sophisme de Singleton :
Si l'intention derrière l'utilisation de ce modèle est de créer un objet singleton, il échoue. La fonction constructeur reste accessible, permettant la création de plusieurs instances à l'aide du nouveau entités.constructor.
Le consensus est clair : les classes anonymes immédiatement instanciées doivent être évitées. Un littéral d'objet simple offre une alternative plus efficace et plus simple :
var entity = { name: 'Foo', getName: function() { return this.name; } };
Bien que le nouveau modèle de classe soit acceptable dans certains autres langages, il se comporte différemment en JavaScript . La nature dynamique de la création de classes JavaScript exclut les avantages dont bénéficient ces langages.
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!