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

dúvida sobre real blindagem do exercício

Eu entendo que o exercício blinda o objeto para um eventual n1.data.setDate(11), por exemplo.

Contudo, a classe ainda estaria vulnerável a um n1._data.setDate(11), correto?

5 respostas

Fala ai Eric, tudo bem? Na verdade não porque é feito o Object.freeze(this);, dessa forma, a mesma não pode sofrer alterações.

Espero ter ajudado.

Matheus, no próprio exercício explica que o Object.freeze não previne alterações via método. É isso que eu estou sugerindo. Uma alteração via método, só que diretamente na propriedade privada. Testei aqui e realmente muda a data apesar dos métodos empregados para evitar isso.

Fala Eric, na verdade ele deveria dar erro no console do JavaScript, informando que você não pode alterar propriedades readonly de objetos.

Estranho você conseguir alterar.

Matheus, não entendi por que deveria dar o resultado que você disse. Na aula foi nos dito que o Object.freeze é shallow e que não previne alterações utilizando os métodos internos do objeto. Como foi isso exatamente que eu fiz com n1._data.setDate(11) , era de se esperar que funcionasse, não?

Inclusive, toda a programação defensiva só foi gerada por que isso era possível. Contudo, o que a programação defensiva fez foi gerar uma cópia da propriedade privada da classe toda vez que um getter fosse usado, de forma que as alterações ficassem na cópia. No entanto, caso o programador quisesse, ainda poderia fazer a alteração se usasse diretamente a propriedade privada, como no exemplo aí. Correto?

solução!

Fala Eric, na verdade houve um mal entendimento da minha parte em relação à sua dúvida, desconsidera meu comentário (estava focando em alterar os valores do objeto em si, ou seja, reatribuir valores para as propriedades da classe).

Abraços e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software