Separando o pedido de @kruncher da discussão em # 1754:
Tenho usado Object.freeze em instâncias momentâneas e geralmente alcançou o que eu precisava; exceto que acabei de descobrir que o seguinte falha:
let now = Object.freeze(moment()); if (now.isSameOrBefore(anotherTime)) { // throws exception }
A exceção:
TypeError: Can't add property _isValid, object is not extensible at valid__isValid (C:\git\quick-test\node_modules\moment\moment.js:93:24) at Moment.moment_valid__isValid [as isValid] (C:\git\quick-test\node_modules\moment\moment.js:2195:16) at Moment.isSame (C:\git\quick-test\node_modules\moment\moment.js:1945:44) at Moment.isSameOrBefore (C:\git\quick-test\node_modules\moment\moment.js:1962:21)
Isso pode ser corrigido para que Object.freeze possa ser usado quando desejado?
const moment = require('moment')
const today = Object.freeze(moment());
today.toString()
=> 'Tue May 02 2017 10:04:52 GMT-0400'
today.add(1, 'day')
=> moment("2017-05-03T10:04:52.889")
today.toString()
=> 'Wed May 03 2017 10:04:52 GMT-0400'
Talvez esteja faltando alguma coisa, mas Object.freeze
não parece funcionar para mim na versão mais recente. Eu sei que há um grande impulso para a imutabilidade em 3.x
mas, por enquanto, há confiabilidade em Object.freeze? /
Versão do nó: 6.10 (~ lts)
Versão do momento: 2.18.1
@butterflyhug - Não consigo reproduzir o TypeError, mesmo no modo estrito.
@SeanDunford - isso parece estranho. Não sei se você pode confiar na imutabilidade no 2.x.
Eu adoraria ajudar a entender por que esse objeto parece mutável, mesmo se congelado ou deepFrozen .
@marwahaha - Mudamos para Luxon agora. Na época, não estávamos prontos para usar o 3.x.
Ok, vou fechar e assumir que Object.freeze não funciona para moment
s na versão 2.x.