Moment: add() mute de manière inattendue l'objet d'origine.

Créé le 26 juil. 2013  ·  2Commentaires  ·  Source: moment/moment

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.

Commentaire le plus utile

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)

Tous les 2 commentaires

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é.

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

Questions connexes

chitgoks picture chitgoks  ·  3Commentaires

slavafomin picture slavafomin  ·  3Commentaires

tanepiper picture tanepiper  ·  3Commentaires

RobinvanderVliet picture RobinvanderVliet  ·  3Commentaires

M-Zuber picture M-Zuber  ·  3Commentaires