Wie kann man ein Javascript-Objekt tief klonen?
Ich weiß , gibt es verschiedene Funktionen auf Basis von Frameworks wie JSON.parse(JSON.stringify(o))und $.extend(true, {}, o)aber ich möchte nicht , einen Rahmen, so verwenden.
Was ist der eleganteste oder effizienteste Weg, um einen tiefen Klon zu erstellen?
Wir kümmern uns um Randfälle wie das Klonen von Arrays. Prototypenketten nicht brechen, sich mit Selbstreferenz befassen.
Es ist uns nicht wichtig, das Kopieren von DOM-Objekten und Ähnlichem zu unterstützen, da .cloneNodees aus diesem Grund existiert.
Da ich hauptsächlich tiefe Klone für die node.jsVerwendung der ES5-Funktionen der V8-Engine verwenden möchte, ist dies akzeptabel.
[Bearbeiten]
Bevor jemand vorschlägt, möchte ich erwähnen, dass es einen deutlichen Unterschied zwischen dem Erstellen einer Kopie durch prototypisches Erben vom Objekt und dem Klonen gibt . Ersteres bringt die Prototypenkette durcheinander.
[Weiter bearbeiten]
Nachdem ich Ihre Antwort gelesen hatte, kam ich zu der nervigen Entdeckung, dass das Klonen ganzer Objekte ein sehr gefährliches und schwieriges Spiel ist. Nehmen Sie zum Beispiel das folgende schließungsbasierte Objekt
var o = (function() {
var magic = 42;
var magicContainer = function() {
this.get = function() { return magic; };
this.set = function(i) { magic = i; };
}
return new magicContainer;
}());
var n = clone(o); // how to implement clone to support closures
Gibt es eine Möglichkeit, eine Klonfunktion zu schreiben, die das Objekt klont, zum Zeitpunkt des Klonens denselben Status hat, den Status jedoch nicht ändern kann, oohne einen JS-Parser in JS zu schreiben?
Es sollte keine reale Welt mehr für eine solche Funktion geben. Dies ist nur akademisches Interesse.
cloneFunktion nicht zugänglich sind . Das betreffende Objekt sollte eine eigene maßgeschneiderte cloneMethode bereitstellen.