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

Freeze em atributos de classe

Partindo da ideia de que tudo no JS é um Object e ele faz o deep freeze, não seria possível aplicar o freeze aos atributos da classe um por um após seta-los no construtor? Não resolveria a questão da segurança em alteração da variável?

constructor() {
        this._data = new Date(this._data.getTime());
        Object.freeze(_data);

        this._quantidade = 1;
        Object.freeze(_quantidade);

        this._valor = 0.0;

        Object.freeze(this);
    }
3 respostas
solução!

Boa tarde, Luan! Como vai?

Há duas coisas a serem observadas nessa sua abordagem!

1) O método Object.freeze() retorna um objeto congelado, então o correto seria fazer:

this._data = new Date(this._data.getTime());
this._data = Object.freeze(_data);

2) Ainda assim, o Object.freeze() tem comportamento shallow (raso) como o mestre Flávio explicou durante essa aula. Ou seja, aplicar o Object.freeze() da forma como eu fiz no item 1 seguindo o que vc propôs, ainda assim não resolveria o problema pq a data pode ter outros objetos dentro dela que não seriam tornados imutáveis. Portanto, a solução é realmente implementar a programação defensiva como mostrado nessa aula.

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos!

Sim, a parte da programação defensiva eu peguei, só me bateu essa duvida por curiosidade mesmo. Muito obg.

Por nada, Luan! Sempre que tiver qualquer dúvida é só mandar aqui no fórum!

Grande abraço e bons estudos!