我正在尝试找到一种方法来深度克隆一个JS类实例,同时保留整条原型链。
我已经看到了如何深度克隆一个对象:
JSON.parse(JSON.stringify(instance))
我已经学会如何制作一个类实例的浅拷贝:
Object.assign( Object.create( Object.getPrototypeOf(instance) ), instance)
但我的问题是,有没有办法深度克隆一个类的实例?
我正在尝试找到一种方法来深度克隆一个JS类实例,同时保留整条原型链。
我已经看到了如何深度克隆一个对象:
JSON.parse(JSON.stringify(instance))
我已经学会如何制作一个类实例的浅拷贝:
Object.assign( Object.create( Object.getPrototypeOf(instance) ), instance)
但我的问题是,有没有办法深度克隆一个类的实例?
最好的克隆对象的方法是使用内置于对象实现中的代码来克隆自身,例如在对象本身上添加一个.clone()
方法(或者叫任何你想要的名字),并使该对象支持制作自己的副本。然后,它可以针对任何实例数据执行正确的操作,这些数据只有对象实现本身才知道如何处理所有可能类型的实例数据。
JSON.parse(JSON.stringify(myObject))
方式存在问题。此外,它会将对象的方法替换为undefined
并重新排序属性。function deepClone(instance) {
return new Promise(resolve => {
const messageChannel = new MessageChannel();
messageChannel.port2.onmessage = e => resolve(e.data);
messageChannel.port1.postMessage(instance);
});
}
.clone()
方法(或者使用其他名称),并使对象支持制作自身的副本。然后,它可以对任何实例数据进行正确处理,而只有对象实现本身才知道如何处理所有可能类型的实例数据。 - jfriend00