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 #nome e idade.
  • O método apresentar() deve retornar a string formatada.
  • O getter nome deve 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

  1. Declaramos a classe Pessoa com a palavra-chave class.
  2. Dentro dela, definimos o campo privado #nome (a cerquilha indica que é privado).
  3. O constructor recebe nome e idade e atribui nome a #nome e idade a this.idade (propriedade pública).
  4. O getter nome permite ler o valor de #nome de fora da classe.
  5. O método apresentar() usa template literals para montar a string com os valores.
  6. Criamos uma instância p com new Pessoa('Ana', 30).
  7. Chamamos p.apresentar() e p.nome para 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.#nome fora da classe: gera erro de sintaxe (SyntaxError: Private field '#nome' must be declared in an enclosing class).
  • Não usar this ao acessar propriedades: return nome; em vez de return 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