2015-06-22 21 views
42

Ho incontrato un problema in cui devo memorizzare i valori iniziali di un oggetto momento ma ho qualche problema a impedire alla variabile di cambiare insieme all'oggetto originale.Come posso risolvere la mutabilità in moment.js?

Sfortunatamente Object.freeze() non funziona, perché moment.js restituisce un errore "Data non valida" quando provo a formattarlo.

+3

E il codice sembra ...? Se si desidera memorizzare il valore iniziale, memorizzare il valore temporale, disponibile utilizzando il metodo * valueOf * o la conversione implicita in numero. – RobG

+0

una volta impostata la variabile, è impostata, non cambierà automaticamente, quindi cerca di non impostarla più e più volte –

risposta

67

C'è un plugin Moment.js su NPM chiamato frozen-moment - È possibile utilizzare moment().freeze() al posto di Object.freeze(moment()).

In caso contrario, la vaniglia Moment.js ha un metodo clone che dovrebbe aiutare a evitare problemi mutabilità, così si potrebbe fare qualcosa di simile:

var a = moment(), 
    b = a.clone(); // or moment(a) 

UPDATE:

Sono passati due anni da quando ho scritto questa risposta In questo momento, è emersa un'altra libreria per la gestione delle date: https://date-fns.org/

Questa libreria è immutabile per impostazione predefinita e segue un'architettura modulare e funzionale, il che significa che è più adatta allo scuotimento degli alberi e al client- impacchettatura laterale. Se stai lavorando a un progetto che fa ampio uso di Webpack sul lato client, e scopri che Moment.js ti dà problemi con la tua build, o anche se la mutabilità di Moment.js ti causa un sacco di mal di testa, allora dovrebbe dare date-fns una prova.

+0

Bene, sto usando moment.js nel plugin fullCalendar e si scopre che stavo ottenendo il momento oggetto dati da uno stato successivo del mio evento di quanto avrei dovuto. I problemi di mutabilità sono sicuramente una cosa con moment.js però, quindi ti ringrazio molto per il suggerimento e mi dispiace di aver sprecato il tuo tempo. – Shengbo1618

+7

Puoi manipolare la variabile 'momento' memorizzata senza mutarla: usa semplicemente clone() come questo: ' zz = moment(); zz.clone(). Add (3, 'h'). ToISOString(); ' – Quake1TF

+0

commento sopra aiutato, grazie mille! – jones