Classes JavaScript: Uma introdução – Parte 1

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!