Desenvolvimento

Como congelar objetos em javascript com o Object.freeze()

Como congelar objetos em javascript com o Object.freeze()
Junte-se a mais de X pessoas

Entre para nossa lista e receba conteúdos exclusivos e com prioridade

Você já ouviu falar do object.freeze()?

O método Object.freeze() é uma forma de congelar os seus objetos e torna-los imutáveis, com ele você impede que as suas propriedade sejam alteradas.

Mas o Object.freeze() é um método raso, isso quer dizer, ele não congela as propriedades das propriedades, por exemplo, se o seu objeto tem um propriedade que também é um objeto com outras propriedade ele não vai conseguir congelar essas propriedades.

Resumidamente, uma classe Pessoa com as propriedade Nome, idade, nascimento e hobbies:

var pessoa = {
                Nome: 'Felipe',
                Idade: 30,
                DatadeNascimento: new Date(1990, 06, 30),
                Hobbies: {
                    descricao: 'Livros',
                    frequencia: '2 por mês'
                }
            }

Após o freeze as propriedade Nome, Idade, DatadeNascimento e Hobbies não serão alteradas, mas os setYear, set{outras funções}… que a propriedade DatadeNascimento herdou de Date não serão congelados. E nem as propriedades que Hobbies tem.

Na prática você pode executar esses código aqui para ver o que estamos falando:

console.log('Valores Iniciais de Pessoa:')
console.log(pessoa);

console.log('! ----------- Vamos alterar sem o freeze:')
pessoa.Nome = 'Leticia';
console.log(pessoa);

console.log('! ------------- Vamos utilizar o freeze();')
Object.freeze(pessoa);
console.log(pessoa);

console.log('! ------------- Executamos o mesmo código para alterar, só que após o freeze();')
pessoa.Nome = 'Tadeu';
console.log(pessoa);

console.log('Mas como falamos, freeze é raso:')
console.log('! ------------- vamos tentar alterar a data:')
pessoa.DatadeNascimento.setFullYear(2000);
console.log(pessoa);

console.log('! ------------- vamos tentar alterar Hobbies:')
pessoa.Hobbies = {profissao: 'TI', experiencia: 10}
console.log(pessoa);

E você vai ver no seu console uma resposta como essa:

Object.freeze e como ele é raso.

Como você pode ver no anterior, eu não consegui alterar a propriedade Hobbies, porque ela está freeze, mas se eu tentar congelar as propriedades que Hobbies, tem:

console.log('! ------------- vamos tentar alterar as propriedades de Hobbies:')
pessoa.Hobbies.descricao = 'Filmes';
pessoa.Hobbies.frequencia = '1 por dia';
console.log(pessoa);
Agora nós conseguimos alterar as propriedades dentro de Hobbies.

PS: você pode chamar a função “Object.isFrozen(pessoa);” para verificar se seu objeto está realmente congelado.

Comenta aí,

o que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *