Boa tarde!
Vamos separar em pedaços seu questionamento:
var data = new Date(); // --> data atual
data.setDate(10); //--> ano, mês, horário mantido, mas dia 10
data.getTime(); //->Retorna o valor de uma data em número. Ex: 1581355547384
var data2 = new Date(data.getTime()) //--> seria a data do dia 10.
então, quanto a sua pergunta: "se eu passar n1._data.setDate(10), lá na classe Negociacao, new Date(data.getTime()) passaria a data que se refere ao dia 10 não é mesmo?"
Correto, vale a data como se fosse dia 10.
Seguindo: "porque data.getTime() é o valor do dia 10."
data é dia 10. O getTime() retorna um valor numérico referente ao dia 10.
Seguindo: "Porque que este código this._data = new Date(data.getTime()); , está definindo como dia atual? É porque getTime() sempre será o dia atual?"
No momento da execução do código, a hora que você insere uma negociação, ele pega a data atual, passando um new Date(); No exercício em questão, o que o instrutor fez foi um bloqueio de manipulação do valor, de modo que seja impedido que haja alteração no valor da data da negociação. Passando o valor como getTime(), se evita problemas de manipulação de data.
No exercício,
get data() {
return new Date(this._data.getTime());
}
A ideia aqui é retornar um novo objeto data, que não seja a referencia de memória da nossa negociação. Se retornar direto o this._data, é uma referência que pode ser manipulada. Quando se usa o new , se cria uma nova referencia de memória, que evita a manipulação.