Eu fiquei um pouco perdida com relação a aula de orientação de objetos privados em JavaScript, em parte pelo fato das novas alterações que foram propostas, em parte porque deu a impressão que o prof. Ricardo talvez tenha feito algo que já não é boa prática (que segundo ele mesmo não deveríamos "roubar" e exibir um atributo privado diretamente) e eu estava tentando já seguir a forma "nova" de fazer enquanto acompanhava junto, usando o # e tudo mais já para experimentar o recurso (e já podia ver as limitações que o recurso tem). O meu código ficou assim:
class Cliente {
nome;
cpf;
}
class ContaCorrente {
agencia;
#saldo = 0;
sacar(valor) {
if (this.#saldo >= valor) {
this.#saldo -= valor;
}
}
depositar(valor) {
if (valor > 0) {
this.#saldo += valor;
}
}
extrato(this.#saldo) {
console.log(this.#saldo);
}
}
const cliente1 = new Cliente();
cliente1.nome = "Ricardo";
cliente1.cpf = 111222233309;
const cliente2 = new Cliente();
cliente2.nome = "Alice";
cliente2.cpf = 88822233309;
const contaCorrenteRicardo = new ContaCorrente();
//contaCorrenteRicardo.#saldo = 10000; <- não é permitido porque é privado
contaCorrenteRicardo.agencia = 1001;
contaCorrenteRicardo.depositar(100);
contaCorrenteRicardo.sacar(50);
const valorSacado = contaCorrenteRicardo.sacar(50);
console.log(contaCorrenteRicardo);
console.log(contaCorrenteRicardo.extrato);
A minha dúvida é a seguinte: eu não consigo exibir diretamente o atributo #valor
com console.log(contaCorrenteRicardo);
, porque como é um atributo privado, ele não exibe.
Então pensei em como seria a melhor forma de exibir e com isso resolvi criar esse método contaCorrenteRicardo.extrato
. Porém, não dá certo de se fazer isso em JavaScript, porque ele me dá o erro na declaração do método extrato(#saldo)
/extrato(this.#saldo)
(tentei ambas as formas, mas não funcionaram).
Então eu pergunto: qual seria a forma "correta" de implementar isso, no JavaScript "moderno", sem "quebrar a regra" de tentar exibir um atributo privado diretamente?