如何克隆整个“对象”在Javascript

How to clone an entire "object" in Javascript?

本文关键字:Javascript 对象 何克隆      更新时间:2023-09-26

我已经尝试了很多我在这里找到的解决方案,但直到现在他们都没有真正解决我的问题。

假设我有一个这样的函数:

    var SquareObject = function(id, x, y, text, rectClass, textClass){
      var arrayObj = {
        "id": null,
        "shape": "rect",
        "label": null,
        "rect": {
          "class": null,
          "x": null,
          "y": null,
          ...
        },
        "text": {
          "class": null,
          "x": null,
          "y": null,
          ...
        }
        function initArrayObj(){
          ...
        }
        function anotherFunction(){
          ...
        }
    }

如何复制所有内容,包括方法?因为在我复制了这个SquareObject之后,我将不得不改变位于arrayObj的属性,同时仍然保持其原始状态的副本。

我已经找到了克隆arrayObj内容的方法,但现在还不能完全解决我的问题。

谢谢!

var copyObj = arrayObj.constructor();
for (var attr in arrayObj) {
    if (arrayObj.hasOwnProperty(attr)) {
        copyObj[attr] = arrayObj[attr];
    }
}

如果你想复制这个函数

var obj= Object.assign(SquareObject)
console.log(obj)

如果你想复制构造函数,那么

Person(){
  this.age=20;
  this.name='ignatius';
  this.display = function(){
    console.log(`Name : ${this.name}  ${this.age}.`);
 }
}
var copy = Object.assign(Person);
var obj = new Person();
console.log(obj.name)// 'ignatius'

这也适用于对象

var a= {
          name: 'ignatius',
          age: 2
  }
var copy = Object.assign(a)
console.log(a.name ) // ignatius