/ es6

Dynamic instantiation de uma Classe ES6 no Javascript

Tive a necessidade de criar um teste para uma série de classes e para isso eu precisava instanciar essas classes sem saber quem eram elas.

Em uma linguagem como Java ou C# isso seria muito fácil, mas no javascript isso talvez não seja tão intuitivo.

No meu caso eu importei cada classe dinamicamente usando o require.

Classe de modelo:

class Dog {
   constructor(sounds) {
       this.sound = sound;
   }
}

E eu importo minha classe sem saber quem ela é:

const MyClass = require('path/da/minha/classe/Dog');

E para instanciar essa classe que nós não sabemos qual é, o jeito mais simples é após jogarmos essa class para uma variavel como fiz acima, é simplesmente acessar a propriedade default desse objeto criado após o import, esse default nada mais é do que foi indicado no export default do seu arquivo.

Então vamos instanciar essa variavel MyClass usando o a prop default

const instance = new MyClass.default('woof');

E agora podemos acessar a prop sound que eu coloquei de exemplo dentro da classe Dog;

console.log(instance.sound); // output -> 'woof'

Pronto! A mágica acontece graças a prop default!