Tutorial Completo de Classes e Herança em ES6+ JavaScript

As ClassesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. foram introduzidas oficialmente em ES6 (ECMAScript 2015) para fornecer uma sintaxe mais simples e clara para criar objetos e trabalhar com o mecanismo de herança do JavaScriptIntrodução ao JavaScript e Configuração do AmbienteIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente.. Embora por baixo dos panos ainda sejam usados prototypes, a sintaxe de classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. torna o código mais organizado e fácil de entender.

Neste tutorial, iremos explorar a criação de classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência., a definição de métodos e propriedades e, por fim, como a herança funciona em ES6+ para promover o reuso e estruturação de código de forma mais elegante.

O que são Classes no JavaScript?🔗

Em JavaScriptIntrodução ao JavaScript e Configuração do AmbienteIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente., classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. são essencialmente “atalhos” para criar objetos e lidar com protótipos, mas com uma aparênciaRelação entre HTML e CSSRelação entre HTML e CSSDescubra como HTML e CSS trabalham juntos para criar páginas web esteticamente agradáveis e bem estruturadas, facilitando a manutenção e o desempenho. e comportamento mais próximos de linguagens orientadas a objeto tradicionais. Essa forma de declarar classes foi adicionada para facilitar a compreensão e a manutenção do código.

Em resumo, uma classe define uma “receita” para criar objetosFundamentos de Arrays e ObjetosFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web. que compartilham as mesmas características (propriedades) e comportamentos (métodos).

Declarando Classes🔗

Para declarar uma classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência., utilizamos a palavra-chave classAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. seguida do nome que desejamos dar à classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência.. Dentro das chaves {}, definimos o método constructor(), que é invocado automaticamente quando criamos uma instância (objeto) dessa classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência., e demais métodos que desejamos:

class Pessoa {
  constructor(nome, idade) {
    this.nome = nome;
    this.idade = idade;
  }
  apresentar() {
    console.log(`Olá, meu nome é ${this.nome} e tenho ${this.idade} anos.`);
  }
}
// Criando uma instância
const pessoa1 = new Pessoa('Alice', 30);
pessoa1.apresentar(); // "Olá, meu nome é Alice e tenho 30 anos."

Detalhes e Boas Práticas

Métodos e Propriedades da Classe🔗

Dentro de uma classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência.:

É válido notar que, em versões mais recentes do JavaScriptIntrodução ao JavaScript e Configuração do AmbienteIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente., também podemos declarar fields (propriedades da classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência.) diretamente dentro do corpo, porém seu suporte ainda pode variar entre ambientes. Exemplo simplificado:

class Carro {
  // Um campo de classe (ainda requer suporte em determinados navegadores)
  marca = 'Marca Padrão';
  constructor(modelo) {
    this.modelo = modelo;
  }
  // Método
  buzinar() {
    console.log('Beep! Beep!');
  }
}
const meuCarro = new Carro('ModeloXYZ');
console.log(meuCarro.marca);  // "Marca Padrão"
meuCarro.buzinar();           // "Beep! Beep!"

Utilizando Getters e Setters🔗

Podemos definir métodos especiais que simulam propriedades: get e set. Isso permite que façamos validações ou transformaçõesTransformações: translate(), rotate(), scale(), skew()Transformações: translate(), rotate(), scale(), skew()Aprenda a aplicar transformações em CSS como translate, rotate, scale e skew para criar layouts dinâmicos e visuais impactantes sem alterar o fluxo da página. quando alguém tenta ler (get) ou atribuir (set) valores a determinados atributos.

class Retangulo {
  constructor(largura, altura) {
    this._largura = largura;
    this._altura = altura;
  }
  get largura() {
    return this._largura;
  }
  set largura(valor) {
    if (valor <= 0) {
      console.error('A largura precisa ser maior que zero!');
      return;
    }
    this._largura = valor;
  }
  get area() {
    return this._largura * this._altura;
  }
}
const retangulo = new Retangulo(10, 5);
console.log(retangulo.area); // 50
retangulo.largura = 0;       // "A largura precisa ser maior que zero!"
Dica: nomes internos como \_largura e \_altura costumam ser adotados para indicar que são propriedades “privadas” ou de uso interno, mas não há real encapsulamento em JavaScript (a menos que usemos private fields em versões mais recentes).

Métodos e Propriedades Estáticas🔗

Métodos e propriedades estáticasPosicionamento: static, relative, absolute, fixed, stickyPosicionamento: static, relative, absolute, fixed, stickyDescubra como usar os métodos de posicionamento CSS, de static a sticky, para criar layouts interativos, precisos e eficazes. são acessados diretamente a partir da classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência., sem precisar criar instâncias. Para defini-los, usamos a palavra-chave staticPosicionamento: static, relative, absolute, fixed, stickyPosicionamento: static, relative, absolute, fixed, stickyDescubra como usar os métodos de posicionamento CSS, de static a sticky, para criar layouts interativos, precisos e eficazes.:

class Conversor {
  static celsiusParaFahrenheit(c) {
    return (c * 9/5) + 32;
  }
}
console.log(Conversor.celsiusParaFahrenheit(25)); // 77

Esses métodos e propriedades são especialmente úteis para criar utilitários ou constantes relacionadas à classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência..

Herança com "extends" e "super"🔗

A herança permite criar classes “filhas” que estendem o comportamento de classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. “pais”. Para isso, utilizamos a palavra-chave extends. Dentro de uma classe filha, podemos chamar o construtor e métodos da classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. pai usando super.

Criando uma Classe Base

class Animal {
  constructor(nome) {
    this.nome = nome;
  }
  emitirSom() {
    console.log(`${this.nome} está fazendo um som...`);
  }
}

Criando a Classe Derivada

class Cachorro extends Animal {
  constructor(nome, raca) {
    super(nome); // chama o constructor da classe Animal
    this.raca = raca;
  }
  emitirSom() {
    // sobrescreve o método da classe pai
    console.log(`${this.nome} (raça: ${this.raca}) está latindo: Au Au!`);
  }
}
const rex = new Cachorro('Rex', 'Labrador');
rex.emitirSom();
// "Rex (raça: Labrador) está latindo: Au Au!"

No exemplo acima, Cachorro herda as características da classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. Animal, mas adiciona novas propriedades (raca) e também sobrescreve (override) o método emitirSom().

Exemplo Prático de Herança🔗

A seguir, um exemplo narrativo que mostra como organizar classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. e herança de forma mais ampla para representar uma pequena hierarquia de contas bancárias:

class ContaBancaria {
  constructor(agencia, numero, saldoInicial) {
    this.agencia = agencia;
    this.numero = numero;
    this.saldo = saldoInicial;
  }
  depositar(valor) {
    this.saldo += valor;
    console.log(`Depósito de R$ ${valor} realizado! Saldo atual: R$ ${this.saldo}.`);
  }
  sacar(valor) {
    if (valor > this.saldo) {
      console.log('Saldo insuficiente!');
      return;
    }
    this.saldo -= valor;
    console.log(`Saque de R$ ${valor} realizado! Saldo atual: R$ ${this.saldo}.`);
  }
}
class ContaCorrente extends ContaBancaria {
  constructor(agencia, numero, saldoInicial, limiteChequeEspecial) {
    super(agencia, numero, saldoInicial);
    this.limiteChequeEspecial = limiteChequeEspecial;
  }
  sacar(valor) {
    if (valor > (this.saldo + this.limiteChequeEspecial)) {
      console.log('Saldo insuficiente mesmo com cheque especial!');
      return;
    }
    this.saldo -= valor;
    console.log(`Saque de R$ ${valor} realizado! Saldo atual: R$ ${this.saldo}.`);
  }
}
class ContaPoupanca extends ContaBancaria {
  constructor(agencia, numero, saldoInicial) {
    super(agencia, numero, saldoInicial);
  }
  renderJuros(taxa) {
    const rendimento = this.saldo * taxa;
    this.saldo += rendimento;
    console.log(`Rendimento de R$ ${rendimento} aplicado! Saldo atual: R$ ${this.saldo}.`);
  }
}
// Exemplo de utilização
const contaCorrente = new ContaCorrente('001', '12345-6', 1000, 500);
contaCorrente.sacar(1200);
// "Saque de R$ 1200 realizado! Saldo atual: R$ -200."
contaCorrente.sacar(500);
// "Saldo insuficiente mesmo com cheque especial!"
const contaPoupanca = new ContaPoupanca('001', '98765-4', 2000);
contaPoupanca.renderJuros(0.01);
// "Rendimento de R$ 20 aplicado! Saldo atual: R$ 2020."

Esse código ilustra como a classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. ContaBancaria fornece a base de operações de depósito e saque, enquanto ContaCorrente e ContaPoupanca adicionam ou modificam comportamentos, aproveitando o que já existe na classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. “mãe”.

Conclusão🔗

O domínioComo Hospedar seu Site na InternetComo Hospedar seu Site na InternetAprenda a publicar seu site com nosso guia detalhado sobre registro de domínio, hospedagem, FTP e segurança. Mantenha seu website acessível e protegido 24h. desses recursos de classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. e herança oferece uma base sólida para organizar sua aplicação em JavaScript, simplificar o reuso de lógica, manter o código limpo e facilitar futuras modificações. A prática constante, criando exemplos e buscando sempre o melhor design, é fundamental para dominar completamente essa feature do JavaScriptIntrodução ao JavaScript e Configuração do AmbienteIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente..

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados