1. ホーム
  2. javascript

[解決済み] javascript ES6 クラスインスタンスをクローンする方法

2022-08-14 01:08:23

質問

ES6を使用してJavascriptのクラスインスタンスをクローンする方法を教えてください。

jqueryや$extendに基づいた解決策には興味がありません。

オブジェクトのクローンに関するかなり古い議論を見たことがありますが、この問題は非常に複雑であることを示唆しています。

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

どのように解決するのですか?

複雑で、何度も試しました。最終的に、このワンライナーは私のカスタムES6クラスインスタンスに対して機能しました。

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

プロトタイプの設定を避けることができるのは と言う ではコードがかなり遅くなるからです。

シンボルをサポートしていますが、ゲッター/セッターには完璧ではなく、非列挙可能なプロパティでは動作しません ( Object.assign() ドキュメント ). また、基本的な内部クラス(Array、Date、RegExp、Mapなど)のクローニングは、悲しいことにしばしばいくつかの個別の処理が必要なようです。

結論です。これは混乱です。いつの日か、ネイティブでクリーンなクローン機能ができることを期待しましょう。