Métodos Privados
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 19 de 56.
Métodos privados em classes JavaScript permitem que você oculte detalhes de implementação e evite o acesso externo à funcionalidade interna.
A partir do ES2022, métodos privados podem ser definidos usando o prefixo #:
class Counter {
#count = 0;
// Cria um método privado
#increment() {
this.#count++;
}
// Método público que usa o método privado
addOne() {
this.#increment();
return this.#count;
}
}Vamos criar uma instância de Counter:
const myCounter = new Counter();Podemos chamar o método público:
console.log(myCounter.addOne()); // Saída: 1Mas tentar acessar o método privado diretamente causará um erro:
myCounter.#increment(); // Erro: O método privado não é acessível fora da classeMétodos privados ajudam a manter o encapsulamento ao manter os detalhes de implementação interna ocultos do mundo exterior.
Desafio
Você recebeu uma classe MessageBox que armazena mensagens. Sua tarefa é adicionar um método privado chamado #isValidMessage(text) que valida mensagens. Ele deve:
- Retornar
truese o texto não estiver vazio e tiver menos de 100 caracteres - Retornar
falsecaso contrário
Folha de consulta
Métodos privados em classes JavaScript são definidos usando o prefixo # e só podem ser acessados de dentro da classe:
class Counter {
#count = 0;
// Private method
#increment() {
this.#count++;
}
// Public method that uses the private method
addOne() {
this.#increment();
return this.#count;
}
}Métodos privados não podem ser acessados de fora da classe:
const myCounter = new Counter();
myCounter.addOne(); // Works
myCounter.#increment(); // Error: Private method is not accessibleMétodos privados ajudam a manter o encapsulamento, ocultando detalhes da implementação interna.
Experimente você mesmo
import { MessageBox } from './messageBox.js';
// Usando a caixa de mensagem
const box = new MessageBox();
console.log(box.setMessage("Hello")); // "Message set!" (usa #isValidMessage)
console.log(box.setMessage("")); // "Invalid message!" (usa #isValidMessage)
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