As classes foram introduzidas no JavaScript no ECMAScript 2016, são simplificações para as heranças baseadas em prototypes. A sintaxe para classes não introduz nenhum modelo novo de herança de orientação a objetos em JS, mas provém uma maneira mais simples e clara de criar objetos e lidar com herança. As Classes são funções especiais e a sintaxe de uma classe possui dois componentes: class expressions e class declarations.
Como declarar classes?
Você pode usar uma declaração de classe para definir uma class. Utilize a palavra-chave class seguida pelo nome. Por exemplo:
class Sayajin { constructor(nome, poder){ this.nome = nome; this.poder = poder; } }
Aqui, definimos que nosso Sayajin possui um nome e poder de luta.
Hoisting:
Precisamos ter em mente que existe uma diferença entre declarar funções e classes. Primeiro, precisamos declarar a classe, para depois acessá-la. Caso contrário, o código lançará uma exceção ReferenceError.
const kakarotto = new Sayajin(); // ReferenceError class Sayajin {}
O que são Expressões de Classes?
São formas de definir classes. Elas podem possuir nomes ou ser anônimas. O nome de uma expressão de classe é local ao corpo da classe.
// Anônima let Sayajin = class { constructor(nome, poder){ this.nome = nome; this.poder = poder; } }; // Nomeada let Sayajin = class Sayajin { constructor(nome, poder){ this.nome = nome; this.poder = poder; } };
Definindo métodos:
O corpo de uma classe é a parte que está entre as chaves {}. No corpo, você define os membros da sua classe, como os construtores, ou os métodos. Os corpos das Declarações de Classes e Expressões de Classes são executados em modo estrito.
Construtor:
O constructor é um método especial para criar e iniciar um objeto criado pela classe. Só pode existir um método especial com o nome “constructor” dentro de cada classe. Utilize a palavra-chave super para chamar o construtor de uma classe pai.
Método:
Métodos são funções, mas seguem a lógica das propriedades. Você chama um método, e percebe que é parecido com acessar uma propriedade, mas você coloca () no final do nome do método, possivelmente com argumentos. No exemplo abaixo, definimos e usamos o método nivelPoder() na classe Sayajin. Nosso método nivelPoder nos traz uma string, contendo o nome do Sayajin e seu poder de luta:
nivelPoder(){ return `${this.nome} possui um poder de luta de mais de ${this.poder}!!!`; }
Static Method:
A palavra-chave static define um método estático de uma classe. Eles são chamados sem instanciação e não podem ser chamados quando a classe é instanciada. Aqui, definimos o método estático kaioken, que retorna o poder do Sayajin multiplicado por 10:
class Sayajin { constructor(nome, poder){ this.nome = nome; this.poder = poder; } static kaioken(a){ const kaiokenXDez = a.poder * 10; return kaiokenXDez; } nivelPoder(){ return `${this.nome} possui um poder de luta de mais de ${this.poder}!!!`; } } const kakarotto = new Sayajin("Kakarotto", 8000); console.log(kakarotto.nivelPoder()); //Undefined console.log(Sayajin.kaioken(kakarotto)); // 80000
Gostou deste artigo? Comente abaixo!