Séparer la demande de @kruncher de la discussion sur #1754 :
J'ai utilisé Object.freeze sur des instances de moment et cela a généralement atteint ce dont j'avais besoin; sauf que je viens de découvrir que ce qui suit échoue:
let now = Object.freeze(moment()); if (now.isSameOrBefore(anotherTime)) { // throws exception }
L'éxéption:
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)
Cela peut-il être corrigé afin que Object.freeze puisse être utilisé quand vous le souhaitez ?
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'
Peut-être qu'il me manque quelque chose, mais Object.freeze
ne semble pas du tout fonctionner pour moi sur la dernière version. Je sais qu'il y a une forte poussée pour l'immuabilité dans 3.x
mais en attendant est-il fiable dans Object.freeze ? /
Version du nœud : 6.10 (~lts)
Version instantanée : 2.18.1
@butterflyhug - Je ne parviens pas à reproduire le TypeError, même en mode strict.
@SeanDunford - cela semble bizarre. Je ne sais pas si vous pouvez faire confiance à l'immutabilité dans 2.x.
J'aimerais aider à comprendre pourquoi cet objet semble mutable, même s'il est gelé ou deepFrozen .
@marwahaha - Nous sommes maintenant passés à Luxon. À l'époque, nous n'étions pas prêts à utiliser 3.x.
Ok, je vais fermer et supposer que Object.freeze ne fonctionne pas pour moment
s dans 2.x.