我想使用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);
答案 0 :(得分:1)
Object.assign
仅复制拥有的 可枚举的属性,而继承的class
方法则不会。
但你不想复制那些 - 到clone an instance,你想要创建一个继承自同一原型的对象:
const foo2 = Object.assign(Object.create(Object.getPrototypeOf(foo1)), foo1);
答案 1 :(得分:0)
似乎答案是,开箱即用,不可能。
使用有用的实用程序库,例如lodash
,特别是它的cloneDeep
方法似乎是可行的方法。