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

Declaração const e new Objeto.

Olá pessoal,

Vi em outros cursos que quando declaramos uma const , o seu valor não pode ser modificado. se houver uma modificação vai retornando um erro "Assignment to constant variable".

Porque ao declara um objeto construtor com uma const, podemos alterar os dados do objeto ?

Vamos ver o exemplo da aula.

class Cliente {

    constructor( nome, email, cpf, saldo ){
        this.nome = nome;
        this.email = email;
        this.cpf = cpf;
        this.saldo = saldo;
    };

    depositar( valor ){
        this.saldo += valor;
    };
    exibirSaldo(){
        console.log( `Saldo final R$ ${ this.saldo }` );
    };
};

const andre = new Cliente( "André", "andre@email", "33308044408", 100.00 );

andre.depositar( 20.50 );
andre.exibirSaldo(); // Saldo final R$ 120.5

No caso, o valor de saldo foi alterado.

5 respostas

Boa tarde, Davilson!

Você tem razão, mas se não estou enganado, como foi declarado const no objeto, mesmo que ele seja inalterável, seus atributos podem ser alterados, pois não possuírem a mesma "característica" de ser const na sua classe.

É como um atributo privado no php, que só conseguimos acessar via método publico que poderá ter acesso ao mesmo (neste caso, nos referimos ao encapsulamento).

OI FABIO HENRIQUE, no caso do objeto acho que entendi, em resumo "seus atributos podem ser alterados".

vamos ver outro exemplo que tenho dúvidas.

const notas = [10 ,6 ,8];
notas.push( 7 ); 
console.log(notas); //log  [ 10, 6, 8, 7 ]

Aqui alteramos a variável com o método push().

Agora outro exemplo de modificação;

const notas2 = [10 ,6 ,8];
notas2 = [ 10, 6, 8, 7 ];
console.log(notas2); //TypeError: Assignment to constant variable.

temos o erro. A variável não pode ser alterada.

posso dizer que quando tento modificar a variável diretamente, na verdade estou "re-declarando" a variável ? por isso não posso modificar...

Mas porque um método pode modificar/altera isso ?

Em quais situações isso é possível ?

solução!

Bom dia, Davilson!

Parabéns pelo questionamento, é de suma importância que tenhamos esse hábito para que não só entendamos a linguagem, como principalmente dominá-la.

Então, no seu trecho de código:

const notas2 = [10 ,6 ,8];
notas2 = [ 10, 6, 8, 7 ];
console.log(notas2); //TypeError: Assignment to constant variable.

Você não vai estar adicionando um valor a sua constante, vai estar na verdade atribuindo outros valores. Basicamente você está apagando os dados que nela haviam, e colocando novos resultados, mesmo que, alguns deles sejam idênticos aos que nela já haviam!

Métodos, normalmente não irão alterar a forma como ela foi definida previamente, mesmo que alterem seus dados, ainda vai ser a mesma constante que você definiu previamente.

Muito obrigado Fabio Henrique.

Foi um prazer Davilson!

Qualquer dúvida, pode entrar em contato comigo pelo LinkedIn no meu perfil!

Forte abraço!