Instância de class anônima – é uma má ideia?

No ES6 podemos fazer uma aula anônima:

var entity = class { } 

Mas também podemos instanciá-lo:

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

O que é feito por trás disso, que vantagem trará e quais ressalvas também trarão?

Instância de class anônima – é uma má ideia?

Sim, muito ruim. Tão ruim quanto a new function() { … } estava no ES5 .

Esse estilo de escrita leva à criação de uma nova function de construtor e object de protótipo toda vez que a expressão é avaliada. Se você criar vários objects com essa abordagem, eles não obterão nenhum benefício de classs / protótipos.

Se você pretendia que esse padrão criasse um object singleton, você também falhava. O construtor ainda é criado, e é até mesmo acessível – uma segunda instância pode ser facilmente criada usando o new entity.constructor , derrotando toda a finalidade.

Então não use isso nunca . Um literal de object simples é muito mais fácil de escrever, ler e instanciar:

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

Não se deixe enganar por outras linguagens onde o new class padrão de new class é comum, ele funciona muito diferente lá do que no JavaScript.

Você pode querer aulas anônimas se você sabe exatamente o que está fazendo, você está criando uma hierarquia de classs (ou seja, coisas que você quer cópias) em um sistema de metaprogramação bem pensado, e não há outra solução elegante para extensão, por exemplo

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

Claro que você poderia implementar o acima com algumas funções mágicas abusivas que usam Object.assign :

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

ou encontre uma maneira melhor de fazer o que você está fazendo. Mas casos de uso planejados ocasionalmente (embora raramente) existam.