JS-0701 - JavaScript Completo ES6 - Classes

Uma nova sintaxe para a construção de objetos
As Classes em JS funcionam iguais as Constructor Functions (responsáveis pela criação de objetos) e este conceito é implementado em outras linguagens, nativamente como classes.
Relembrando as funções construtoras, a implementação é definida com seus atributos, métodos de seu protótipo e a instanciação através do operador new em uma variável. Ex:
A partir da versão ES6 o JavaScript trouxe o conceito de classes como forma de implementação de funções construtoras, utilizando uma sintaxe mais simplificada e limpa, utilizando a palavra chave class. Esta nova sintaxe é considerada uma "syntactical sugar". Mas seu funcionamento interno é de funções construtoras, incluindo os métodos no prototype e as heranças baseadas nestes protótipos para a criação de objetos.
As classes, por convenção, assim como as funções construtoras, recebem seu nome com o padrão CamelCase.
A mesma função construtora anterior, escrita como uma classe, fica da seguinte forma:
Para uma classe é essencial a utilização do método chamado constructor, onde são recebidos os parâmetros, caso existam, e são definidas as propriedades do objeto que será criado. Como padrão, o retorno da classe é sempre o this, tendo o construtor como responsável pelo retorno. Contudo é possível definir um retorno específico no construtor, o que não é recomendável, pois restringe o acesso aos métodos internos da classe. As propriedades são acessíveis em qualquer ponto da classe através de this.
As propriedades podem conter qualquer valor ou tipo, incluindo objetos. Ex:
A palavra-chave static pode ser utilizada para retornar a própria classe com suas propriedades pré definidas. Static cria um método dentro da função construtora que não aparece nem no protótipo, se vinculando diretamente a classe e não ao objeto. Isto permite que métodos de uma classe sejam utilizados diretamente, não sendo necessário instanciar a classe com o operador new. Em vez disso, eles são chamados através da própria classe, sendo geralmente funções utilitárias, para criar ou clonar objetos, assim como o método from de Array. Ex: