Brincando com a classe, percebi que mesmo no exemplo final e instanciando nova data, podemos alterar data por meio do seu atributo "privado"
negociacao._data.setTime(11);
A solução nesse caso poderia fazer um freeze do atributo data?
Brincando com a classe, percebi que mesmo no exemplo final e instanciando nova data, podemos alterar data por meio do seu atributo "privado"
negociacao._data.setTime(11);
A solução nesse caso poderia fazer um freeze do atributo data?
Você deixou de seguir a convenção fazendo isso ;)
Bem, não vai funcionar o freeze porque ele não permite alterar a referência, e o que você está fazendo é alterar o estado da referência através de método.
Só com TypeScript você consegue verdadeiro encapsulamento porque ele aceita o modificador private.
Oi Ricardo, consegui esclarecer sua dúvida? Qualquer coisa grita aqui que eu escuto :)
Olá Flávio. Respondeu sim. Convenções servem para isso :D
Eu comentei porque teve um certo esforço para isolar a classe. Mas entendi que o esforço foi pra que a propriedade negociacao.data não fosse mudada e não o negociacao._data.
Certo?
Valew!
É isso mesmo. No caso de _data
, ela esta congelada, não podemos alterar seu valor assim:
negociacao._data = new Date() // não funciona, porque tá freeze
Mas se chamamos um método de _data
para alterar seu estado interno, o valor da data que o objeto guarda, esse valor não é freeze.
Ou seja, Object.freeze não faz deep freeze, ou seja, ele não congela um objeto e todas as suas propriedades internas.
Já com TypeScript, podemos declarar um atributo como private
, algo parecido com Java
, parecido não, igual a Java. Ninguém de fora pode acessar a propriedade.
A convenção do _
é muito usada em JS e em outras linguagem que possuem essa brecha.
Dúvida 100% resolvida? Não deixe de me dar um retorno!
Se ainda tiver dúvida grite!
Oi Ricardo, estou monitorando aqui. Tudo certo agora?
Oi Flávio, tudo certo. Dúvida 100% resolvida.
[]'s Ricardo