添加克隆类对象的方法

时间:2016-10-31 14:06:01

标签: ecmascript-6

我希望能够克隆我班级的对象。我该如何为下面的类实现克隆方法?

export default class Foo {
    constructor(data) {
        this.name = data.firstName + " " + data.lastName 
        this.id = data.objectId
    }

    clone(s){
    }
}

2 个答案:

答案 0 :(得分:1)

只需创建该类的另一个实例并复制属性:

clone() {
    return Object.assign(Object.create(Object.getPrototypeOf(this)), this);
//  or simply
//  return Object.assign(new this.constructor({}), this);
}

您也可以传递选项,以便在构造函数中按预期初始化属性:

clone() {
    return new Foo({
        firstName: this.name.split(" ")[0],
        lastName: this.name.split(" ").slice(1).join(" "),
        objectId: this.id
    });
}

但是,请注意,创建具有相同(但可能是唯一的)id的多个实例可能不是最佳选择。

答案 1 :(得分:1)

假设您要从一个类的实例克隆到另一个实例,可以使用Object.assign

export default class Foo {
    constructor(data) {
        this.name = data.firstName + " " + data.lastName 
        this.id = data.objectId
    }

    clone(s) {
      // It's important to initalize using an empty object, so as to not cause errors
      let copy = new Foo({});
      Object.assign(copy, this);
      return copy;
    }
}