Boa noite! estou na aula sobre os Constructors! neste caso criei 3 clientes e 3 contas. a interação do constructor e seu acessor get esta funcionando perfeitamente na parte do cliente. porem quando cheguei na etapa onde o professor bugan implementa o constructor no modulo de ContaCorrente, segui os passos da aula, porem de alguma forma quando eu dou um console.log de alguma destas 3 contas criadas ele me retorar o seguinte: ContaCorrente {agencia: 1001,** _cliente: Cliente**, _saldo: 0}
onde na parte do cliente: eu esperava que ele fosse me retornar os dados da minha cliente como estava funcionando sem o construtor! irei deixar abaixo o meu codigo nos 3 modulos. caso alguem identificar onde eu estou errando se possivel me explicar o meu erro. Desde já agradeço a atenção e a ajuda pessoal!
INDEX.JS -------------------------------------------------
import{Cliente} from "./Cliente.js";
import{ContaCorrente} from "./ContaCorrente.js";
const cliente1 = new Cliente("Ricardo", 11122233309);
const cliente2 = new Cliente("Alice", 11133322210);
const cliente3 = new Cliente("João", 88888888888888)
console.log(cliente2.nome)
const conta1 = new ContaCorrente(1001, cliente1);
const conta2 = new ContaCorrente(1001, cliente2);
console.log(conta2);
const conta3 = new ContaCorrente(102, cliente3);
conta1.depositar(1000);
conta1.transferir(400, conta2);
conta2.transferir(100, conta3 )
//console.log(conta2);
//console.log(conta3);
ContaCorrente.JS -----------------------------------------
import { Cliente } from "./Cliente.js";
export class ContaCorrente{
agencia;
_cliente;
//#saldo = 0 github.com/tc39/proposal-class-fields#private-fields
_saldo = 0;
set cliente(novoValor){ //set = atribuir um valor a minha propriedade
if(novoValor instanceof Cliente){ // se o novoValor for uma INSTANCIA DE Cliente = true
this._cliente = novoValor; //Usando assessores do tipo set podemos alterar a regra de como um atributo pode ou não ser modificado sem precisar alterar isso em diversos pontos do código
//Usar assessores do tipo set é uma boa prática para garantirmos que a atribuição de propriedades está sempre segura
}
}
get cliente(){ // get é um acessor aqui estamos permitindo que possamos pegar somente o cliente
return this._cliente; // o get sempre ira te retornar um valor e não alterá-lo
}
get saldo(){ // ACESSORES SAO SEMPRE PUBLICOS!!!! Por conta disso nao coloquei o _ no saldo
return this._saldo // Com este acessor fizemos um bloco somente de leitura fazendo com que o _saldo nao possa ser alterado fora da classe por estar somente como leitura
}
constructor(agencia, cliente){
this.agencia = agencia;
this._cliente = cliente;
}
sacar(valor){
if(this._saldo >= valor){
this._saldo -= valor;
return valor;
}else{
console.log("Voce nao pode sacar");
}
}
depositar(valor){
if(valor <= 0){
return; // Early Return para que caso o valor depositado nao estiver dentro das condiçoes, pare a execuçao do codigo
}
this._saldo +=valor;
}
transferir(valor, conta){
const valorSacado = this.sacar(valor);
conta.depositar(valorSacado);
}
} //Null = Um espaço na memoria onde eu peço para ficar vazia manualmente.
// Undefined = Valor indefinido no codigo.
Cliente.js ------------------------------------------------------
export class Cliente{
nome;
_cpf;
get cpf(){
return this._cpf; // return é bem importante para que esta leitura tenha o valor retornado para o cliente
}
constructor(nome, cpf){
this.nome = nome;
this._cpf = cpf;
}
}