Métodos que modificam o estado
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 15 de 56.
Métodos em classes JavaScript podem modificar o estado (propriedades) de um objeto. Esta é uma das principais características da programação orientada a objetos.
Vamos criar uma classe BankAccount simples:
class BankAccount {
constructor(owner, balance = 0) {
this.owner = owner;
this.balance = balance;
}
deposit(amount) {
this.balance += amount;
}
}Agora vamos criar uma instância e modificar seu estado:
const johnsAccount = new BankAccount("John", 100);
console.log(johnsAccount.balance); // Saída: 100
johnsAccount.deposit(50);
console.log(johnsAccount.balance); // Saída: 150Neste exemplo, o método deposit() modifica o estado interno (a propriedade balance) da instância BankAccount.
Podemos adicionar mais métodos de modificação de estado:
class BankAccount {
constructor(owner, balance = 0) {
this.owner = owner;
this.balance = balance;
}
deposit(amount) {
this.balance += amount;
}
withdraw(amount) {
if (amount <= this.balance) {
this.balance -= amount;
}
}
transfer(amount, toAccount) {
if (amount <= this.balance) {
this.balance -= amount;
toAccount.balance += amount;
}
}
}Agora podemos manipular nossa conta bancária de várias maneiras.
Desafio
Você recebeu uma classe Thermostat. Sua tarefa é adicionar métodos que modifiquem seu estado de temperatura:
increaseTemp()- aumenta a temperatura em 1 graudecreaseTemp()- diminui a temperatura em 1 grau
Folha de consulta
Métodos em classes JavaScript podem modificar o estado (propriedades) de um objeto.
Exemplo de uma classe com métodos que modificam o estado:
class BankAccount {
constructor(owner, balance = 0) {
this.owner = owner;
this.balance = balance;
}
deposit(amount) {
this.balance += amount;
}
withdraw(amount) {
if (amount <= this.balance) {
this.balance -= amount;
}
}
transfer(amount, toAccount) {
if (amount <= this.balance) {
this.balance -= amount;
toAccount.balance += amount;
}
}
}Usando métodos que modificam o estado:
const johnsAccount = new BankAccount("John", 100);
console.log(johnsAccount.balance); // Outputs: 100
johnsAccount.deposit(50);
console.log(johnsAccount.balance); // Outputs: 150Experimente você mesmo
import { Thermostat } from './thermostat.js';
// Código de teste - não modifique
const livingRoom = new Thermostat("Living Room", 20);
livingRoom.increaseTemp();
livingRoom.increaseTemp();
console.log(livingRoom.currentTemp); // Deve exibir 22
livingRoom.decreaseTemp();
console.log(livingRoom.currentTemp); // Deve exibir 21
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Objetos e a Palavra-chave this
Revisão Rápida: ObjetosAdicionando Métodos a ObjetosEntendendo a Palavra-chave thisFunções ConstrutorasA Palavra-chave newDesafio de Recapitulação7Herança e a palavra-chave extends
HerançaA relação "é um"A palavra-chave extendsO método super()Herdando propriedades e métodosDesafio de recapitulação10Polimorfismo
O que é Polimorfismo?Sobrescrevendo Métodos HerdadosUsando superDesafio de Recapitulação13Composição vs. Herança
A relação "tem um" vs. "é um"Os limites da herança profundaConstruindo objetos2Organizando o Código
O que são Módulos?Exportando com exportImportando com importExportações Default vs. Nomeadas5Encapsulamento e Acesso
EncapsulamentoCampos de Classe Públicos e PrivadosMétodos PrivadosDesafio de Recapitulação8Organizando Código POO
Organizar Classes em Módulos11Projeto: Um Renderizador de Formas
Configuração: Classe Shape e ExportaçãoHerança da Classe Circle14Sistema de Gerenciamento de Biblioteca
Projetando a BibliotecaClasse Livro com Composição