Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Get e set para objetos literais, é possível?

Fazendo uns testes, percebi que também é possível tornar privado propriedades de objetos literais, da seguinte forma:

let pessoa = {
    "#nome": "Felipe"
}

pessoa.#nome    // Uncaught Error: Cannot read private member #nome from an object whose class did not declare it

Certo, como esperado.

Mas nesse caso, com faço pra acessar a propriedade privada através de uma função ou método? Não consegui reproduzir algo que fosse semelhante à um get com que o nome fosse retornado.

let pessoa = {
    "#nome": "Felipe",
    nome: () => { return this.#nome }
}

pessoa.nome()    // Uncaught SyntaxError: Private field '#nome' must be declared in an enclosing class

E um set, é possível?

2 respostas
solução!

Olá, Felipe!

Você está no caminho certo, mas há um pequeno detalhe que precisa ser levado em consideração. O conceito de campos privados com o uso do símbolo "#" é uma funcionalidade recente do JavaScript e é aplicável apenas em classes, não em objetos literais.

No seu exemplo, você está tentando usar um campo privado em um objeto literal, o que não é suportado. Os campos privados só podem ser acessados dentro da classe onde foram declarados.

Vou te dar um exemplo de como você pode fazer isso em uma classe:

class Pessoa {
    #nome;

    constructor(nome) {
        this.#nome = nome;
    }

    getNome() {
        return this.#nome;
    }

    setNome(nome) {
        this.#nome = nome;
    }
}

let pessoa = new Pessoa("Felipe");
console.log(pessoa.getNome()); // Felipe

pessoa.setNome("João");
console.log(pessoa.getNome()); // João

Neste exemplo, a classe Pessoa tem um campo privado #nome. Os métodos getNome e setNome são usados para acessar e modificar o valor do campo privado #nome, respectivamente.

Espero ter ajudado e bons estudos!

Entendi! Obrigado pela explicação!