ES6 を使用して Javascript クラス インスタンスを複製するにはどうすればよいですか。
jquery や $extend に基づくソリューションには興味がありません。
オブジェクトのクローン作成に関するかなり古い議論を見たことがありますが、それによると、問題はかなり複雑だそうです。しかし、ES6 では非常にシンプルな解決策が提示されています。以下にその解決策を載せて、皆さんが満足できるものかどうか見ていきたいと思います。
編集: 私の質問は重複しているのではないかと言われています。その回答を見たのですが、7 年前のものであり、ES6 以前の js を使用した非常に複雑な回答が含まれています。ES6 を考慮した私の質問には、はるかに簡単な解決策があるのではないかと思います。
ベストアンサー1
複雑です。いろいろ試しました。最終的に、このワンライナーが私のカスタム ES6 クラス インスタンスで機能しました。
let clone = Object.assign(Object.create(Object.getPrototypeOf(orig)), orig)
プロトタイプの設定を避ける理由は彼らが言うコードの実行速度が大幅に低下します。
シンボルをサポートしていますが、ゲッター/セッターには最適ではなく、列挙できないプロパティでは動作しません(Object.assign() ドキュメント)。また、基本的な内部クラス (Array、Date、RegExp、Map など) の複製には、残念ながら個別の処理が必要になることがよくあります。
結論: 混乱しています。いつかネイティブでクリーンなクローン機能が登場することを期待しましょう。