1
resposta

date

class Negociacao {

    constructor(data, quantidade, valor) {

        this._data = new Date(data.getTime());
        this._quantidade = quantidade;
        this._valor = valor;
        Object.freeze(this);
    }

    get volume() {

        return this._quantidade * this._valor;
    }

    get data() {

        return new Date(this._data.getTime());
    }

    get quantidade() {

        return this._quantidade;
    }

    get valor() {

        return this._valor;
    }
}

ola tem essa necessidade de retornar outro new date no metodo get, foi feita a atribuiçao do data = new date(data.getDate()) ja nao foi protegido?

1 resposta

Olá Luan, tudo bem com você?

A proteção do Object.freeze é feita apenas na primeira camada, então quando fazemos:

const negociacao = new Negociacao( new Date(), 30, 50);

negociacao._quantidade = 80

console.log(negociacao._quantidade);

Veremos que não conseguimos atribuir pois temos apenas uma variável de tipo primitivo , então a proteção é feita pois há apenas uma camada :)

Entretanto Date nos devolve um objeto, e dessa forma não conseguimos fazer uma proteção completa, se a nossa classe tiver algo parecido como:

    get data() {

        return this._data;
    }

Esse objeto _data não está totalmente protegido, vou te mostrar com o mesmo exemplo:

console.log(negociacao.data)

> Date Tue May 12 2020 11:19:54 GMT-0300 (Horário Padrão de Brasília)

Agora vou pegar o objeto do tipo data, que temos diversos métodos entre eles um para mudar o mês:

negociacao.data.setMonth(8);
console.log(negociacao.data)
> Date Sat Sep 12 2020 11:19:54 GMT-0300 (Horário Padrão de Brasília)

E veja que conseguimos mudar o mês de Maio para Setembro :)

Dessa forma conseguimos perceber que com objetos não temos toda essa imutabilidade, pois congelamos a primeira camada, se uma dessa camadas for um outro objeto, podemos alterar os dados tranquilamente, como é o caso do atributo Data :)

Quando fazemos igual o instrutor estamos tendo essa garantia de que ele pode alterar tranquilamente a data que não se refletira em nosso objeto!

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