如何在JavaScript中的两个现有对象之间复制

alb*_* sh 2 javascript

我有两个相同类型的对象,我想将其中一个的内容复制到另一个。

const Invoice1 = new InvoiceModel(); 

const Invoice2 = new InvoiceModel();
Run Code Online (Sandbox Code Playgroud)

现在为了具有以下内容:Invoice2 = Invoice1

看完之后 :

如何正确克隆JavaScript对象?

我尝试使用以下任何命令,但所有命令都说在运行时未定义invoice2:

 Invoice2 = { ...Invoice1 };  //OR

 Invoice2 = Object.assign({}, Invoice1);  //OR

 Invoice2 = JSON.parse(JSON.stringify(Invoice1));
Run Code Online (Sandbox Code Playgroud)

最后,通过阅读本文(https://medium.com/@Farzad_YZ/3-ways-to-clone-objects-in-javascript-f752d148054d),我使用了此功能来复制对象的内容:

function CopyObject(src, target) {
  for (let prop in src) {
    if (src.hasOwnProperty(prop)) {
      target[prop] = src[prop];
    }
  }
  return target;
}
Run Code Online (Sandbox Code Playgroud)

我想知道除了使用上面的功能以外,还有没有更清洁的方法?

我已经阅读了许多有关此问题的文章,但所有这些文章都创建了一个新对象。

And*_*rew 7

我建议在原型中创建一个方法,该方法InvoiceModel会自动为您执行此操作。

class InvoiceModel {
  constructor(num) {
    this.num = num
  }
  duplicate() {
    return Object.assign(Object.create(this), this)
  }
}

const obj1 = new InvoiceModel(10)
console.log(obj1.num)
const obj1Copy = obj1.duplicate()
console.log(obj1Copy.num)
console.log(obj1Copy === obj1)
Run Code Online (Sandbox Code Playgroud)

  • @albert sh-当您的类停止表示简单数据对象时,复制将涉及不同的事情。 (2认同)