par exemple:
m = moment() # lets say it's Oct 3rd.
oct6 = m.add('days', 3)
oct6 est maintenant oct 6th, comme prévu, mais m a également changé, de manière inattendue
oct7 = m.add('days', 4)
si add() avait fonctionné de manière fonctionnelle sans état de mutation, oct7 serait en fait défini sur le 7 octobre, mais parce que add() a muté l'état de m, il est défini sur le 10 octobre !
en fait, oct6 et oct7 sont maintenant le même objet, m, et tous deux font référence au 10 octobre.
cela semble vraiment peu intuitif et peut facilement avoir des conséquences inattendues lorsque des objets de moment sont transmis dans des applications non triviales.
J'ai été mordu par ça aussi, jusqu'à ce que je lise Moment Clone .
Tous les moments sont muables.
Ainsi, maintenant, je suppose que la plupart des méthodes vont muter l'objet d'origine. Je pense que les deux approches sont valides, mais la mutation correspond au moins à l'API Date
qui fait muter les objets.
Vous devez appeler moment#clone
sur le moment ou l'envelopper dans un appel à moment
comme
m = moment() # let's say it's Oct 3rd.
oct6 = m.clone().add('days', 3)
oct7 = moment(m).add('days', 4)
Ce n'est pas un bug, c'est une fonctionnalité ! Lisez une discussion ici : https://github.com/moment/moment/pull/390
Il ne pense pas que cela va jamais changer, du moins à cause de problèmes de compatibilité.
Commentaire le plus utile
J'ai été mordu par ça aussi, jusqu'à ce que je lise Moment Clone .
Ainsi, maintenant, je suppose que la plupart des méthodes vont muter l'objet d'origine. Je pense que les deux approches sont valides, mais la mutation correspond au moins à l'API
Date
qui fait muter les objets.Vous devez appeler
moment#clone
sur le moment ou l'envelopper dans un appel àmoment
comme