Boa tarde Lucas,
No curso aprendemos que propriedades com o underline "_" antes do nome são propriedades privadas e não devem ser diretamente manipuladas fora de suas classes, ou seja ao mexer nessas variáveis você já estaria fazendo uma prática ruim.
Mas vamos lá como fazemos pra tornar um objeto realmente imutável no javascript? Existem vários jeitos um deles é declarar essa variável como uma const, ou utilizar recursos externos como o deepfreeze, que basicamente faz um loop em todas as propriedades de um objeto e aplica o object.freeze nelas.
Uma vez eu precisei armazenar o resultado que vinha de uma API para preservar o resultado de uma tela que era alterada pelo usuário, mas que em seguida poderia voltar ao estado original. Depois de quebrar um pouco a cabeça descobri que você pode transformar um objeto em uma string. Dessa maneira essa string fica armazenada como o estado original daquele objeto, e depois quando você quiser recuperar aquele objeto basta fazer o parse da string. Pra entender o motivo de eu quebrar tanto a cabeça recomendo estudar a diferença de "passagem por valor" e "passagem por referência".
Exemplo de como armazenar o resultado original de um objeto:
var objeto = {
"name":"John",
"age":30,
"city":"New York"
};
//Transformando objeto em String
var objetoEstadoOriginal = JSON.stringify(objeto);
//Mudando objeto
objeto.name = "Oswaldo";
//Recuperando o objeto original
var novoObjeto = JSON.parse(objetoEstadoOriginal);
// Imprimindo objeto original
console.log(novoObjeto);
Abraços