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

Referência do objeto

Eu entendi que é preciso ao invés de passar a referência do objeto "hoje" para o atributo da classe "data", criamos um novo objeto usando o método getTime() do objeto "hoje". O que não ficou claro para mim é se getTime() é um método que faz referência ao objeto "hoje" porque na hora que eu modificar o setTime() o getTime() não muda também dentro da classe Negociacao?

class Negociacao {
    constructor(data,quantidade,valor){
        this.data = new Date(data.getTime());
        this.quantidade = quantidade;
        this.valor = 0;
        Object.freeze(this); //Congelando a instância da classe
    }

    get volume(){
        return this._quantidade * this._valor;
    }

    get data(){
        return new Date(this._data.getTime()); 
    }    
}
var hoje = new Date();
var negociacao = new Negociacao(hoje, 1, 2);
console.log(negociacao.data);
hoje.setDate(11);
hoje.getTime();
console.log(negociacao.data);
4 respostas

Fala ai Thiago, tudo bem? O getTime seria uma função do objeto hoje que pega a data e converte para milissegundos, ai esses milissegundos serão utilizados para criar uma nova data e retorná-la.

Espero ter ajudado.

Não muda porque foi criado um novo objeto no método data() nessa linha:

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

caso tivesse retornando algo assim:

return this._data.getTime; 

aí teríamos no console a alteração.

Bom dia. Eu entendi o retorno do método, o que para mim ainda não faze sentido. Vamos por partes: 1 - No construtor do objeto Negociacao, a data está recebendo um new Date com base no método getTime() do objeto "hoje". 2 - Portanto, se eu mudar o setDate() (escrevi errado no primeiro tópico) tanto pra maior ou menor que a data atual vai modificar o getTime() daquele objeto correto? 3 - Porque então não irá modificar no getTime() do construtor também? Já que fazem referência ao mesmo objeto "hoje".

solução!

Fala Thiago, vamos lá:

  1. No construtor tu está pegando o milissegundos da data passada (no caso o hoje) e criando um novo objeto com a mesma data para atribuí-lo à uma propriedade da classe Negociacao: this.data = new Date(data.getTime());.

  2. Quando tu faz o hoje.setDate(11); no hoje tu está modificando a data apenas do objeto hoje, ele não muda a propriedade this.data pois é outro objeto com outra referência e endereço de memória. O hoje serve apenas como base para criar esse novo objeto de data.

Espero ter ajudado.