3
respostas

Problema com a classe

Ao final do vídeo "Nossa primeira classe", da aula 01, do curso "Javascript: Programando a Orientação a Objetos", o professor retira o RG da classe e deixa apenas um dos clientes com o RG com o intuito de demonstrar que esta informação não irá aparecer no PowerShell, para nenhum cliente, uma vez que o atributo RG foi removido da classe. No meu código isso não aconteceu e não encontro o problema, pois eu também removi o RG da classe e ainda assim aparece essa informação para os clientes no PowerShell.

class Cliente {
    nome;
    cpf;
    agencia;
    saldo;
}

const cliente1 = new Cliente();
const cliente2 = new Cliente();

cliente1.nome = "Ricardo";
cliente1.cpf = 11122233344;
cliente1.agencia = 1001;
cliente1.saldo = 0;
cliente1.rg = 111223334;

cliente2.nome = "Alice"
cliente2.cpf = 88822233344;
cliente2.agencia = 1001;
cliente2.saldo = 0;
cliente2.rg = 44455521;


const cliente3Nome = "Alice";
const cliente3CPF = 44422233354;
const cliente3Agencia = 1001;
const cliente3Saldo = 0;

console.log(cliente1, cliente2);
3 respostas

Cara, posso estar equivocado, mas se não me engano esse é um dos "problemas" do JS, onde se você inicia uma instância de Cliente e adiciona um atributo que não existe dentro da classe o JS acaba adicionando dinâmicamente, inclusive mais pra frente do curso o professor deve explicar melhor sobre isso (na parte de setters e getters se não me engano).

Deixa o RG comentado, da um console.log no cliente1, depois tira o comentário do RG e faz um console.log no cliente1 de novo. Depois faz outro teste, comenta o RG, da um console.log no cliente1.rg, tira o comentário e faz um console.log do cliente1.rg.

Eu não testei nada disso mas talvez deva aparecer algo no sentido que eu falei, espero ter ajudado.

Carlos eu peço que, se seu problema foi solucionado, marque o tópico como Resolvido, caso contrário diga se tem ainda alguma dúvida que eu (ou quem souber) tentará ajudar.

isso mesmo Carlos, como o Allan falou, o fato ocorre devido a linguagem ser dinâmica. Então qualquer atributo que você porventurar criar na instância do seu objeto, ele irá aparecer no terminal somente para aquele objeto.

Se quiser, pode fazer o teste:

class Cliente {
    nome;
    cpf;
    agencia;
    saldo;
}

const cliente1 = new Cliente();
const cliente2 = new Cliente();

cliente1.nome = "Ricardo";
cliente1.cpf = 11122233344;
cliente1.agencia = 1001;
cliente1.saldo = 0;
cliente1.rg = 111223334;
cliente1.cidade = "Fortaleza";
cliente1.estado = "Ceará";

cliente2.nome = "Alice"
cliente2.cpf = 88822233344;
cliente2.agencia = 1001;
cliente2.saldo = 0;

console.log(cliente1);
console.log(cliente2);