Heim >Web-Frontend >js-Tutorial >Eine kurze Diskussion über Javascript Medium und Deep Copy_Grundkenntnisse

Eine kurze Diskussion über Javascript Medium und Deep Copy_Grundkenntnisse

WBOY
WBOYOriginal
2016-05-16 16:29:571433Durchsuche

In JavaScript übergeben alle Zuweisungen zwischen Objektvariablen Adressen. Einige Schüler fragen sich möglicherweise, welche Objekte Objekte sind. Vielleicht wäre es besser, ein Beispiel zu nennen:

Code kopieren Der Code lautet wie folgt:

typeof(true) //"boolean"
typeof(1) //"Nummer"
typeof("1") //"string"
typeof({}) //"object"
typeof([]) //"object"
typeof(null) //"object"
typeof(function(){}) //"function"

Tatsächlich ist das Hauptobjekt, das wir in einer tiefen Kopie verarbeiten müssen, das Objektobjekt. Nichtobjektobjekte müssen nur direkt und normal zugewiesen werden. Meine Idee zur Implementierung von js Deep Copy ist:

Durchlaufen Sie alle Eigenschaften des Objekts,
Wenn das Attribut „Objekt“ ist, ist eine besondere Behandlung erforderlich,
Wenn dieses Objekt etwas Besonderes ist und ein Array ist, erstellen Sie ein neues Array und kopieren Sie die Elemente im Array tief
Wenn es sich bei diesem Objekt um ein Nicht-Array-Objekt handelt, rufen Sie einfach die Deep-Copy-Methode rekursiv dafür auf.
Wenn es kein „Objekt“ ist, kopieren Sie es einfach normal.

Das Folgende ist meine Implementierung:

Code kopieren Der Code lautet wie folgt:

Object.prototype.DeepCopy = function () {
var obj, i;
obj = {};

für (attr in diesem) {
If (this.hasOwnProperty(attr)) {
If (typeof(this[attr]) === "object") {
If (this[attr] === null) {
            obj[attr] = null;
}
           else if (Object.prototype.toString.call(this[attr]) === '[object Array]') {
             obj[attr] = [];
für (i=0; i               obj[attr].push(this[attr][i].DeepCopy());
          }
         } sonst {
           obj[attr] = this[attr].DeepCopy();
}
} sonst {
        obj[attr] = this[attr];
}
}
}
Rückgabe obj;
};

Wenn der Browser ECMAScript 5 unterstützt, können Sie

verwenden, um alle Eigenschaften der Objekteigenschaften tief zu kopieren

Code kopieren Der Code lautet wie folgt:

Object.defineProperty(obj, attr, Object.getOwnPropertyDescriptor(this, attr));

ersetzt

Code kopieren Der Code lautet wie folgt:

obj[attr] = this[attr];

Der Vorteil der direkten Implementierung dieser Methode auf Object.prototype besteht darin, dass alle Objekte diese Methode erben. Der Nachteil besteht darin, dass einige Bibliotheken auch Objektobjekte neu schreiben, sodass es manchmal zu Konflikten kommt. Das ist etwas zu beachten. Die spezifischen Verwendungsmethoden sind wie folgt:

Code kopieren Der Code lautet wie folgt:

Object.prototype.DeepCopy = function () { ... }
var a = { x:1 };
var b = a;
var c = a.DeepCopy();
a.x = 2;
b.x = 3;
console.log(a.x); //3
console.log(b.x); //3
console.log(c.x); //1

Das Obige ist die Erklärung zu Deep Copy, aber da wir heute über Deep Copy gesprochen haben, wollen wir auch die Ähnlichkeiten und Unterschiede zwischen ihnen kurz zusammenfassen.

Flache Kopie (Schattenklon): Es werden nur der Grundtyp und der Objekttyp des Objekts kopiert, die noch zur ursprünglichen Referenz gehören.
Deep Copy (Deep Clone): Kopiert nicht nur die Grundklasse des Objekts, sondern kopiert auch die Objekte im Originalobjekt. Das heißt, es werden völlig neue Objekte generiert.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn