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

时间:2016-05-02 10:15:47

标签: javascript

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

2 个答案:

答案 0 :(得分:1)

Object.assign仅复制拥有的 可枚举的属性,而继承的class方法则不会。

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

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

答案 1 :(得分:0)

似乎答案是,开箱即用,不可能。

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