web-dev-qa-db-ja.com

javascript ES6クラスインスタンスを複製する方法

ES6を使用してJavascriptクラスインスタンスを複製するにはどうすればよいですか。

Jqueryまたは$ extendに基づくソリューションには興味がありません。

問題が非常に複雑であることを示唆するオブジェクトクローンの非常に古い議論を見てきましたが、ES6では非常に単純なソリューションが提示されます。

編集:私の質問が重複していることが示唆されています。私はその答えを見ましたが、それは7歳であり、ES6以前のjsを使用した非常に複雑な答えが含まれています。私は、ES6を可能にする私の質問が劇的にシンプルなソリューションを持っていることを提案しています。

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

私は多くのことを試してみましたが、最終的にはこれでうまくいきました。

また、プロトタイプを設定することも避けます。これは、 彼らの言うとおり であるため、コードの速度が大幅に低下するためです。

そして、それはワンライナーです!

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

Object.assign の特性に注意してください。シャローコピーを行い、クラスメソッドをコピーしません。

ディープコピーまたはコピーの詳細な制御が必要な場合は、 lodash clone functions があります。

7
Tom