web-dev-qa-db-fra.com

Comment cloner une instance de classe javascript ES6

Comment cloner une instance de classe Javascript à l'aide de ES6.

Je ne suis pas intéressé par les solutions basées sur jQuery ou $ extend.

J'ai vu des discussions assez anciennes sur le clonage d'objets qui suggèrent que le problème est assez compliqué, mais avec ES6, une solution très simple se présente - je vais la mettre ci-dessous et voir si les gens le trouvent satisfaisant.

modifier: il est suggéré que ma question est un doublon; J'ai vu cette réponse mais elle a 7 ans et implique des réponses très compliquées avec pré-ES6 js. Je suggère que ma question, qui permet à ES6, a une solution radicalement plus simple.

61
Tom
let clone = Object.assign( Object.create( Object.getPrototypeOf(orig)), orig)

J'ai essayé beaucoup, à la fin cela a fonctionné pour moi.

Cela évite également de définir le prototype, car ils disent cela ralentit beaucoup le code.

Et c'est un one-liner!

77
flori
const clone = Object.assign( {}, instanceOfBlah );
Object.setPrototypeOf( clone, Blah.prototype );

Notez les caractéristiques de Object.assign : il effectue une copie superficielle et ne copie pas les méthodes de classe.

Si vous voulez une copie en profondeur ou davantage de contrôle sur la copie, utilisez le fonctions de clonage de lodash .

7
Tom