Ich arbeite in jquery mit backbone.js und gehe in den Fall, wo ich Modelle duplizieren muss, aber ich muss eine tiefe Kopie auf ihnen machen, so dass keine Referenzen zwischen den Kopien existieren. Modelle können andere Modelle als Attribute haben. Modelle können anon Funktionen als Attribute haben.
Also arbeite ich an der Erstellung eines Algorithmus, der die meisten Backbone-Modelle tiefklonen wird. Ich erwarte, dass alle Bindungen während dieser Kopie entfernt werden (für die neue Instanz), also mache ich mir keine Sorgen, dass ich versuche, sie zu behalten.
Ziele:
Die vereinfachte Version von dem, was ich derzeit habe, ist unten:
%Vor%Jede Hilfe oder Einsicht, die Sie geben können, wäre sehr willkommen. Danke!
extend
von jQuery können Sie Objekteigenschaften einfach kopieren.
Hier ist ein künstliches, aber illustratives Beispiel. Es zeigt sogar, warum Sie Funktionen nicht "tief" kopieren müssen!
%Vor%Hier ist eine Geige für Ihre Bequemlichkeit: Ссылка
Wenn Sie diesen Code ausführen, sehen Sie, dass someObj
und deepCopy
in der Struktur identisch sind, aber unterschiedliche Objekte.
Wie Sie sehen, ist das tiefe Kopieren von Funktionen nicht erforderlich, da die this
-Referenz an jedes Objekt gebunden ist, auf das die Funktion angewendet wird. Dies liegt daran, dass in javascript der Aufruf einer Funktion als deepCopy.f()
funktionell äquivalent zu deepCopy.f.call(deepCopy)
ist. Ein anschauliches Beispiel:
Und eine Geige: Ссылка
Wenn Sie Lo-Dash als Underscore-Drop-in-Ersatz verwenden, können Sie auch _. cloneDeep
%Vor%Tags und Links javascript jquery backbone.js jquery-mobile