Moment: Activer toutes les fonctionnalités de non-mutation après Object.freeze()

Créé le 14 janv. 2016  ·  4Commentaires  ·  Source: moment/moment

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 ?

Help Wanted

Tous les 4 commentaires

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.

Cette page vous a été utile?
0 / 5 - 0 notes