是否可以使用Object.assign使用其方法克隆对象?

问题描述 投票:0回答:2

我想使用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);

示例 - http://jsbin.com/dacopazanu/edit?js,console

javascript
2个回答
1
投票

Object.assign只复制自己的可枚举属性,继承class方法不是。

但是你不想复制那些 - 对于clone an instance,你想要创建一个继承自同一原型的对象:

const foo2 = Object.assign(Object.create(Object.getPrototypeOf(foo1)), foo1);

0
投票

看来答案是,开箱即用,不可能。

使用有用的实用程序库,如lodash,特别是它的cloneDeep方法似乎是肯定的方法。

© www.soinside.com 2019 - 2024. All rights reserved.