Анонимный экземпляр classа – это плохая идея?

В ES6 мы можем сделать анонимный class:

var entity = class { } 

Но мы также можем его создать:

 var entity = new class { constructor(name) { this.name = name; } getName() { return this.name; } }('Foo'); console.log(entity.getName()); // Foo 

Что делается за ним, какая польза от него принесет и какие оговорки он принесет?

    Анонимный экземпляр classа – это плохая идея?

    Да, очень плохо. Так же плохо, как new function() { … } была в ES5 .

    Этот стиль письма приводит к созданию новой функции-конструктора и объекта-прототипа каждый раз, когда выражение оценивается. Если вы создадите несколько объектов с таким подходом, они не получат ни одного из преимуществ classов / прототипов.

    Если вы создали этот шаблон для создания одноэлементного объекта, вам тоже не удалось. Конструктор все еще создан, и он даже доступен – второй экземпляр может быть легко создан с использованием new entity.constructor , победившего всю цель.

    Поэтому никогда не используйте его . Простой литерал объекта намного проще писать, читать и создавать экземпляры:

     var entity = { name: 'Foo', getName() { return this.name; } }; console.log(entity.name); // Foo 

    Не обманывайте себя другими языками, где шаблон new class является общим, он работает совсем по-другому, чем в JavaScript.

    Вы можете захотеть анонимных classов, если вы точно знаете, что делаете, вы создаете иерархию classов (т.е. вещи, которые вы хотите копировать) в хорошо продуманной системе метапрограммирования, и нет другого элегантного решения для расширения, например

     { myImplementation: class extends MyBaseClass { someMethod(x) { super().someMethod(x); insert extended behavior } } } 

    Конечно, вы могли бы реализовать вышеизложенное с некоторыми оскорбительными магическими функциями, которые используют Object.assign :

     { myImplementation: extendMagic(mySuper => ({ someMethod(x) { mySuper.someMethod(x); insert extended behavior } })) } 

    или найти лучший способ сделать то, что вы делаете. Но надуманные прецеденты будут иногда (хотя и редко) существовать.

    Давайте будем гением компьютера.