Heim > Web-Frontend > js-Tutorial > Behandelt Crockfords prototypische Vererbung verschachtelte Objekte korrekt?

Behandelt Crockfords prototypische Vererbung verschachtelte Objekte korrekt?

Barbara Streisand
Freigeben: 2024-12-11 01:49:10
Original
304 Leute haben es durchsucht

Does Crockford's Prototypal Inheritance Handle Nested Objects Correctly?

Crockford's Prototypal Inheritance: Issues with Nested Objects

Douglas Crockford stellt in seinem Buch „Javascript: The Good Parts“ ein Muster zur Vereinfachung vor Objektvererbung. Dieses Muster basiert auf der Object.create-Methode, die die Erstellung eines neuen Objekts auf der Grundlage eines vorhandenen Prototypobjekts ermöglicht.

Während dieses Muster für flache Objekte gut funktioniert, treten beim Umgang mit verschachtelten Objekten Probleme auf. Das Überschreiben eines Werts eines verschachtelten Objekts, das mit diesem Muster geerbt wurde, wirkt sich auf das verschachtelte Element bis zur gesamten Prototypenkette aus.

Zum Beispiel im folgenden Code:

var flatObj = {
  firstname: "John",
  lastname: "Doe",
  age: 23
};
var person1 = Object.create(flatObj);

var nestObj = {
  sex: "female",
  info: {
    firstname: "Jane",
    lastname: "Dough",
    age: 32
  }
};
var person2 = Object.create(nestObj);
Nach dem Login kopieren

Ändern der Alterseigenschaft von person1 aktualisiert die Alterseigenschaft von flatObj, aber eine Änderung der Alterseigenschaft von person2.info aktualisiert fälschlicherweise die Alterseigenschaft von nestObj.info.

Dieses Verhalten ist nicht auf die prototypische Vererbung zurückzuführen, sondern auf die Art und Weise, wie JavaScript verschachtelte Objekte verarbeitet. In JavaScript kann eine Eigenschaft eines Objekts entweder eine eigene Eigenschaft (auf dem Objekt selbst definiert) oder eine geerbte Eigenschaft (auf die über die Prototypenkette zugegriffen wird) sein. Wenn ein Objekt mit Object.create erstellt wird, erbt es alle eigenen Eigenschaften seines Prototypobjekts.

Um dieses Problem zu vermeiden, sollten verschachtelte Objekte explizit dem neuen Objekt zugewiesen werden. Im obigen Beispiel würde der folgende Code ein unabhängiges Info-Objekt für Person2 erstellen:

var person2 = Object.create(nestObj);
person2.info = Object.create(nestObj.info);
Nach dem Login kopieren

Diese Trennung verschachtelter Objekte stellt sicher, dass Änderungen am Info-Objekt von Person2 keine Auswirkungen auf das Info-Objekt von nestObj haben.

Das obige ist der detaillierte Inhalt vonBehandelt Crockfords prototypische Vererbung verschachtelte Objekte korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage