Fácil JavaScript
Criando uma classe Pessoa
Enunciado
Crie uma classe Pessoa com um construtor que recebe nome e idade. Adicione um método apresentar() que retorna "Olá, meu nome é [nome] e tenho [idade] anos.". Use um campo privado #nome e um getter nome para acessá-lo.
Requisitos
- A classe deve ter um campo privado
#nome. - O construtor deve inicializar
#nomeeidade. - O método
apresentar()deve retornar a string formatada. - O getter
nomedeve retornar o valor de#nome.
Código inicial
class Pessoa {
// seu código aqui
}
const p = new Pessoa('Ana', 30);
console.log(p.apresentar());
console.log(p.nome);
Saída esperada
Olá, meu nome é Ana e tenho 30 anos.
Ana
Ver dica
Use #nome para o campo privado e defina o getter com get nome() { return this.#nome; }.
Mostrar solução
class Pessoa {
#nome; // campo privado
constructor(nome, idade) {
this.#nome = nome;
this.idade = idade;
}
get nome() {
return this.#nome;
}
apresentar() {
return `Olá, meu nome é ${this.#nome} e tenho ${this.idade} anos.`;
}
}
const p = new Pessoa('Ana', 30);
console.log(p.apresentar());
console.log(p.nome);
Passo a passo
- Declaramos a classe
Pessoacom a palavra-chaveclass. - Dentro dela, definimos o campo privado
#nome(a cerquilha indica que é privado). - O
constructorrecebenomeeidadee atribuinomea#nomeeidadeathis.idade(propriedade pública). - O getter
nomepermite ler o valor de#nomede fora da classe. - O método
apresentar()usa template literals para montar a string com os valores. - Criamos uma instância
pcomnew Pessoa('Ana', 30). - Chamamos
p.apresentar()ep.nomepara exibir os resultados.
Por que funciona
O campo privado #nome só é acessível dentro da classe, então o getter nome é a forma controlada de expor seu valor. O construtor inicializa os dados e o método apresentar() usa esses dados para gerar a saída. Isso demonstra encapsulamento e a sintaxe básica de classes.
Erros comuns
- Esquecer o
#no campo privado:nome;em vez de#nome;. Isso cria uma propriedade pública e o getter pode não funcionar como esperado. - Tentar acessar
p.#nomefora da classe: gera erro de sintaxe (SyntaxError: Private field '#nome' must be declared in an enclosing class). - Não usar
thisao acessar propriedades:return nome;em vez dereturn this.#nome;causaria erro de referência.
Outra forma de resolver
Se não precisar de encapsulamento, pode usar uma propriedade pública simples:
class Pessoa {
constructor(nome, idade) {
this.nome = nome;
this.idade = idade;
}
apresentar() {
return `Olá, meu nome é ${this.nome} e tenho ${this.idade} anos.`;
}
}
Mas isso expõe nome diretamente, permitindo modificações externas indesejadas.
Saída esperada
Olá, meu nome é Ana e tenho 30 anos.
Ana