Fiz alguns testes e me veio a seguinte dúvida:
Minha classe Negociação está assim:
class Negociacao {
constructor(data, quantidade, valor){
this._data = new Date(data.getTime());
this._quantidade = quantidade;
this._valor = valor;
Object.freeze(this);
}
get data(){
return new Date(this._data.getTime());
}
get quantidade(){
return this._quantidade;
}
get valor(){
return this._valor;
}
get volume(){
return this._quantidade * this._valor;
}
}
Meu script no index.html
está assim:
let negociacao = new Negociacao(new Date(), 10, 20);
console.log(negociacao.data);
negociacao._data.setDate(11);
console.log(negociacao.data);
E a saída que tenho é a seguinte:
Sun May 28 2017 20:31:19 GMT-0300 (Hora oficial do Brasil)
Thu May 11 2017 20:31:19 GMT-0300 (Hora oficial do Brasil)
Ou seja, consegui alterar a data mesmo usando a programação defensiva. Fiz algo de errado ou é isso mesmo? Seria pelo fato de o Object.freeze(this)
não conseguir "congelar" os valores da classe Date?