Wie kann ich ein JavaScript-Objekt korrekt klonen?

Ich habe ein Objekt, x. Ich möchte es als Objekt y kopieren, so dass Änderungen an y nicht x verändern. Ich habe festgestellt, dass das Kopieren von Objekten, die von eingebauten JavaScript-Objekten abgeleitet sind, zu zusätzlichen, unerwünschten Eigenschaften führt. Das ist kein Problem, denn ich kopiere eines meiner eigenen, wörtlich konstruierten Objekte.

Wie kann ich ein JavaScript-Objekt korrekt klonen?

Aus diesem Artikel: Wie man Arrays und Objekte in Javascript kopiert von Brian Huisman:

Object.prototype.clone = function() {
  var newObj = (this instanceof Array) ? [] : {};
  for (var i in this) {
    if (i == 'clone') continue;
    if (this[i] && typeof this[i] == "object") {
      newObj[i] = this[i].clone();
    } else newObj[i] = this[i]
  } return newObj;
};
Kommentare (6)

Hier ist eine Funktion, die Sie verwenden können.

function clone(obj) {
    if(obj == null || typeof(obj) != 'object')
        return obj;    
    var temp = new obj.constructor(); 
    for(var key in obj)
        temp[key] = clone(obj[key]);    
    return temp;
}
Kommentare (4)

Wenn es keine zirkulären Abhängigkeiten in Ihrem Objekt gibt, schlage ich vor, eine der anderen Antworten oder die Kopiermethoden von jQuery zu verwenden, da sie alle recht effektiv zu sein scheinen.

Wenn es zirkuläre Abhängigkeiten gibt (d.h. zwei Unterobjekte sind miteinander verknüpft), sind Sie ziemlich aufgeschmissen, da es (aus theoretischer Sicht) keine Möglichkeit gibt, dieses Problem elegant zu lösen.

Kommentare (1)