【问题标题】:How to clone an entire "object" in Javascript?如何在 Javascript 中克隆整个“对象”?
【发布时间】:2014-08-09 06:05:23
【问题描述】:

我已经尝试了很多在这里找到的解决方案,但直到现在它们中的任何一个都真正解决了我的问题。

假设我有这样的功能:

    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 内容的方法,但现在这并不能完全解决我的问题。

谢谢!

【问题讨论】:

  • 你到底想“克隆”什么? SquareObject 是一个带有多个局部变量的函数——你不能一次克隆它们。您要克隆到哪里?
  • 我之前已经尝试过该主题的所有解决方案。问题是我的函数不会返回任何东西,它就像 OOP 语言中的对象。
  • @Ian ,假设我有类似“var square1 = SquareObject”的东西,而不是我需要“var square2 = clone(SquareObject)”,在某种程度上我可以从 square2 中更改变量,而不在 square1 中更改它们。但如果你说我不能一次克隆所有东西,我认为我必须改变我的方法。

标签: javascript object copy clone


【解决方案1】:

如果你想照原样复制函数

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

【讨论】:

    【解决方案2】:
    var copyObj = arrayObj.constructor();
    for (var attr in arrayObj) {
        if (arrayObj.hasOwnProperty(attr)) {
            copyObj[attr] = arrayObj[attr];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 1970-01-01
      • 2011-07-18
      • 2017-05-22
      • 2013-01-03
      • 2019-01-05
      • 2010-10-10
      相关资源
      最近更新 更多