Moment: Aktivieren Sie alle Nicht-Mutationsfunktionen nach Object.freeze()

Erstellt am 14. Jan. 2016  ·  4Kommentare  ·  Quelle: moment/moment

Ausgliederung der Anfrage von @kruncher aus der Diskussion zu #1754:

Ich habe Object.freeze für Momentinstanzen verwendet und dies hat im Allgemeinen das erreicht, was ich brauchte; außer ich habe gerade festgestellt, dass Folgendes fehlschlägt:

let now = Object.freeze(moment());
if (now.isSameOrBefore(anotherTime)) { // throws exception
}

Die Ausnahme:

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)

Kann dies behoben werden, sodass Object.freeze auf Wunsch verwendet werden kann?

Help Wanted

Alle 4 Kommentare

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'

Vielleicht übersehe ich etwas, aber Object.freeze scheint bei mir auf der neuesten Version überhaupt nicht zu funktionieren. Ich weiß, dass es in 3.x einen großen Druck auf Unveränderlichkeit gibt, aber in der Zwischenzeit gibt es in Object.freeze Zuverlässigkeit? /

Knotenversion: 6.10 (~lts)
Momentversion: 2.18.1

@butterflyhug - Ich kann den TypeError auch im strikten Modus nicht reproduzieren.

@ SeanDunford - das scheint seltsam. Ich weiß nicht, ob Sie der Unveränderlichkeit in 2.x vertrauen können.

Ich würde gerne verstehen, warum dieses Objekt veränderlich erscheint, selbst wenn es eingefroren oder tiefgefroren ist .

@marwahaha - Wir sind jetzt auf Luxon umgestiegen. Zu diesem Zeitpunkt waren wir noch nicht bereit, 3.x zu verwenden.

Ok, ich werde schließen und annehmen, dass Object.freeze für moment s in 2.x nicht funktioniert.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen