Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvidas sobre a imutabilidade Js

Eu não consegui entender muito bem por que o _data precisa de algo a mais para realizar sua imutabilidade e o _quantidade e _valor apenas do Object.freeze(). Alguém poderia responder essa minha dúvida??

1 resposta
solução!

Olá Rafael, tudo bem?

Rafael, o que acontece é simples. As propriedades _quantidade e _valor possuem o que podemos a grosso modo dizer apenas 1 nível de valor, ou seja, Ex.: _valor = 10. Agora o Objeto new Date() é um objeto que possuem vários níveis de valores, é como uma classe com vários métodos. Para testar e entender melhor, abra o console no seu navegador e faça o seguinte:

let data = new Date()
data.getDate()
data.getDay()
data.getHours()
data.getMonth()
etc..

Veja que a variável data que tem como valor uma instância de new Date() possui vários métodos, Neste caso o Object.freeze() não consegue acessar cada um desses métodos e congela-los, entende?

Ex.:

1-) Primeiro com _valor

this._valor = 0;

this._valor
          |___ 0

2-) Segundo com new Date()

this._data = new Date();

this.data
        |__getDate()
        |__getHours()
        |__getFullYear()
        |__getDay()
        |__getMonth()
        |__etc..

Então, como o Object.freeze() é shallow(raso) ele consegue congelar apenas "um nível" de cada elemento, como mostrei no exemplo 2 o objeto Date() possui vários níveis de profundidade e o Object.freeze() não é capaz a acessar cada nível e congelar a todos.

Espero ter ajudado!