質問: json.parse(json.stringify(o));のようなことをしましたが、効率性について質問します。 再帰的なコピー機能にもさまざまな欠陥があります。 標準的な解決策が存在しないことに驚きました。
回答: ecmascript 6 または transpilers を使用できる場合のみ.特徴: コピー中にゲッター/セッターをトリガーしません。 ゲッター/セッターを保存します。 プロトタイプ情報を保存します。 object-literal と functional _ oo _ の両方の書き方で動作します。 コード:function clone(target, source){ for(let key in source){ // use getownpropertydescriptor instead of source[key] to prevent from trigering setter/getter. let descriptor = object.getownpropertydescriptor(source, key); if(descriptor.value instanceof string){ target[key] = new string(descriptor.value); } else if(descriptor.value instanceof array){ target[key] = clone([], descriptor.value); } else if(descriptor.value instanceof object){ let prototype = reflect.getprototypeof(descriptor.value); let cloneobject = clone({}, descriptor.value); reflect.setprototypeof(cloneobject, prototype); target[key] = cloneobject; } else { object.defineproperty(target, key, descriptor); } } let prototype = reflect.getprototypeof(source); reflect.setprototypeof(target, prototype); return target; }