Ich weiß nicht, wann es begann, aber im Front-End-Kreis erschien ein neues Wort: Objekttiefe Klonen. Es sieht sehr groß aus, ist aber in der Tat nicht neu. Sie haben es vielleicht in unserer tatsächlichen Projektentwicklung verwendet, aber aufgrund der Tiefe chinesischer Charaktere werden einige ursprünglich einfache Dinge durch leicht modifiziertes durch ein scheinbar professionelles Vokabular mysteriös.
Warum müssen Sie zunächst ein Objekt tief klonen? Bitte erlauben Sie mir eine Vermutung: Manchmal denken Sie, dass das integrierte Objektdokument von JS zu lang ist, dann könnten Sie dies tun:
Die Codekopie lautet wie folgt:
var d = dokument;
d.by = function (id) {
return D.GetElementById (ID);
};
d.by ('id'). innerhtml = 'Hallo Sentsin';
Der obige Code vereinfacht das Dokument.GetElementById und fügt dem Original -Dokumentobjekt auch eine member -Methode hinzu. Sie können Ihr Urteilsvermögen über den Statuswert verwenden, der von document.ownProperty ('by') zurückgegeben wird. Schauen wir uns das folgende Beispiel an.
Die Codekopie lautet wie folgt:
var person = {name: 'xianxin', Beruf: 'Front-End-Entwicklung', Ort: 'Hangzhou'};
var newperson = Person;
Newperson.age = '24';
console.log (Person);
// Ergebnis: {Name: 'Xianxin', Beruf: 'Front-End-Entwicklung', Ort: 'Hangzhou', Alter: 24}
Es ist ersichtlich, dass ein Objekt einfach ein Alias zum Objekt ist, wenn einfach an eine neue Variable übergeben wird. Dies bedeutet, dass sich der ursprüngliche Objektschlüsselwert durch die Operation am Alias ändert. Das Problem ist jedoch, dass Newperson manchmal völlig unabhängig von der Person ist und keine Synchronisationsbeziehung zwischeneinander besteht. Daher müssen wir eine Kopie generieren. Bitte sehen Sie sich das Beispiel:
Die Codekopie lautet wie folgt:
var kloneObj = function (obj) {
var str, newobj = obj.constructor === Array? []: {};
if (typeof obj! == 'Objekt') {
zurückkehren;
} else if (window.json) {
STR = JSON.Stringify (OBJ), // serialisiertes Objekt
newObj = json.Parse (str); //Wiederherstellen
} anders {
für (var i in obj) {
newobj [i] = typeof obj [i] === 'Objekt'?
Cloneobj (obj [i]): obj [i];
}
}
kehre Newobj zurück;
};
//prüfen
var obj = {a: 0, b: 1, c: 2};
var arr = [0, 1, 2];
// Tiefes Klonen ausführen
var newobj = cloneobj (obj);
var newarr = cloneobj (arr);
// Mitglied des Mitglieds des klonierten neuen Objekts entfernen
Newobj.a;
newarr.splice (0,1);
console.log (obj, arr, newobj, newarr);
// Ergebnis: {a: 0, b: 1, c: 2}, [0, 1, 2], {b: 1, c: 2}, [1, 2];
Dies ist das sogenannte Klonen von Objekten. Aber es gibt ein paar Dinge, die erklärt werden müssen. Das JSON -Objekt und seine Mitgliedermethoden string und im Code an der Spezifikation von ECMAScript5. Sie sind dafür verantwortlich, ein Objekt (einschließlich Array -Objekte) in Zeichenfolgen umzuwandeln und sie wiederherzustellen, wodurch das tiefe Kopieren des Objekts erkennen wird. Für Browser auf niedrigem Niveau (wie z. B. IE) können Sie bei Arrays Newobj.Concat (OBJ) kopieren, und gewöhnliche Objekte können einfach Werte aufzählen und zuweisen.