Warum wird mit Deep Copy von jQuery nicht rekursiv ein Objekt kopiert?

9

Ich habe überall gesucht und ähnliche Fragen mit Antworten gefunden, die mein Problem nicht wirklich ansprechen, also entschuldige ich mich, wenn dies wie eine Wiederholung erscheint, aber es scheint, dass die Deep-Copy-Funktion von jQuery nicht so funktioniert wie sie ist beschrieben (oder vielleicht irre ich seine Beschreibung).

Hier ist ein Beispiel für das Problem, das ich habe: Ссылка

Oder das zum Download: Ссылка

Warum werden die Daten in der vorherigen Kopie geändert, wenn die Tiefenkopie manipuliert wird?

    
user986122 08.05.2012, 19:26
quelle

1 Antwort

5

Zum einen erstellen Sie keine normalen Objekte.

Ich schaue den Quellcode für jQuery 1.7.2 für erweitern.

Ссылка

Und ich bemerke die Linie:

%Vor%

muss zu true ausgewertet werden, um tief zu kopieren. Kopieren ist nur ein Teil des aktuellen Objekts, das kopiert wird.

Aber Sie erstellen keine "einfachen" Objekte. Sie erstellen Objekte, die durch Aufrufen eines Konstruktors mit dem neuen Operator generiert wurden.

Nun, in isPlainObject scheinen diese Zeilen ausgewertet zu werden. (wo hasOwn ist hasOwn = Object.prototype.hasOwnProperty

%Vor%

Und da kommt heraus, dass es kein "plainObject" ist.

Das macht Sinn, wenn Sie überlegen, ob Objekte mit einem Konstruktor wahrscheinlich über diesen Konstruktor erstellt werden oder zumindest eine Art "Klon" -Methode verwenden sollten, wie Sie es in anderen Sprachen / Frameworks sehen.

    
JayC 08.05.2012, 23:51
quelle