Campos de Classe Públicos e Privados
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 18 de 56.
Em classes JavaScript, podemos definir dois tipos de campos de classe: públicos e privados.
Campos públicos são acessíveis de fora da classe e podem ser usados por qualquer pessoa.
Crie uma classe com campos públicos:
class Student {
name = '';
grade = 0;
constructor(name, grade) {
this.name = name;
this.grade = grade;
}
}Crie uma instância de estudante:
const student = new Student('Alice', 95);Acesse campos públicos de fora da classe:
console.log(student.name); // Saída: "Alice"
student.grade = 98;
console.log(student.grade); // Saída: 98Campos privados são denotados com o símbolo # e só podem ser acessados de dentro da classe:
class Student {
name = '';
#grade = 0;
constructor(name, grade) {
this.name = name;
this.#grade = grade;
}
getGrade() {
return this.#grade;
}
updateGrade(newGrade) {
this.#grade = newGrade;
}
}Usando campos privados:
const student = new Student('Bob', 87);
console.log(student.name); // Saída: "Bob"
// Acessar campo privado usando um método
console.log(student.getGrade()); // Saída: 87
// Atualizar campo privado usando um método
student.updateGrade(92);
console.log(student.getGrade()); // Saída: 92
// Isso causaria um erro:
// console.log(student.#grade); // SyntaxErrorDesafio
- Adicione dois campos na classe chamada UserAccount:
- Um campo público
username - Um campo privado
#password
- Um campo público
- Adicione um construtor que aceite os parâmetros
usernameepassword
Folha de consulta
As classes JavaScript suportam campos públicos e privados.
Campos públicos são acessíveis de fora da classe:
class Student {
name = '';
grade = 0;
constructor(name, grade) {
this.name = name;
this.grade = grade;
}
}
const student = new Student('Alice', 95);
console.log(student.name); // Saída: "Alice"
student.grade = 98;Campos privados usam o símbolo # e só podem ser acessados dentro da classe:
class Student {
name = '';
#grade = 0;
constructor(name, grade) {
this.name = name;
this.#grade = grade;
}
getGrade() {
return this.#grade;
}
updateGrade(newGrade) {
this.#grade = newGrade;
}
}
const student = new Student('Bob', 87);
console.log(student.getGrade()); // Saída: 87
student.updateGrade(92);
// student.#grade causaria um SyntaxErrorExperimente você mesmo
import { UserAccount } from './userAccount.js';
// Código de teste - não modifique
const user = new UserAccount("alice", "secret123");
console.log(user.username); // Deve exibir "alice"
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