我想使用Object.assign
来克隆类的实例,包括任何方法。是否可以只使用Object.assign
或者我应该使用像lodash deepClone
这样的东西?
class Foo {
constructor() {
this.a = 1;
this.b = 2;
}
add() {
return this.a + this.b;
}
}
const foo1 = new Foo();
console.log(foo1.add());
console.log(foo1.b);
// ? Where did the add go?
const foo2 = Object.assign({}, foo1, { b: 99 });
console.log(foo2.add());
console.log(foo2.b);
Object.assign
只复制自己的可枚举属性,继承class
方法不是。
但是你不想复制那些 - 对于clone an instance,你想要创建一个继承自同一原型的对象:
const foo2 = Object.assign(Object.create(Object.getPrototypeOf(foo1)), foo1);
看来答案是,开箱即用,不可能。
使用有用的实用程序库,如lodash
,特别是它的cloneDeep
方法似乎是肯定的方法。