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??
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??
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!