No ES6, a capacidade de definir classes anônimas fornece açúcar sintático para declarações de classe. Embora conveniente, a instanciação imediata de tais classes pode levar a uma infinidade de problemas.
Quando uma classe anônima é instanciada imediatamente, o JavaScript cria uma nova função construtora e objeto protótipo dinamicamente. Cada avaliação da expressão resulta em uma função construtora e um protótipo distintos.
Esta prática tem várias desvantagens significativas:
Falta de reutilização:
Ao contrário das classes nomeadas, as classes anônimas instanciadas imediatamente criam um novo construtor e protótipo a cada vez. Isso significa que múltiplas instâncias não compartilharão o mesmo protótipo, perdendo os benefícios da herança de classe e do compartilhamento de protótipo.
Falácia Singleton:
Se a intenção por trás do uso deste padrão é criar um objeto singleton, ele falha. A função construtora permanece acessível, permitindo a criação de múltiplas instâncias usando newentity.constructor.
O consenso é claro: classes anônimas imediatamente instanciadas devem ser evitadas. Um literal de objeto simples fornece uma alternativa mais eficiente e direta:
var entity = { name: 'Foo', getName: function() { return this.name; } };
Embora o novo padrão de classe seja aceitável em algumas outras linguagens, ele se comporta de maneira diferente em JavaScript. A natureza dinâmica da criação de classes do JavaScript exclui as vantagens que essas linguagens desfrutam.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3