Douglas Crockfords Konzept der prototypischen Vererbung bietet einen vereinfachten Ansatz zur Objekterstellung, wie in der Funktion „Object.create“ veranschaulicht. Beim Umgang mit verschachtelten Objekten in diesem Vererbungsframework können Benutzer jedoch auf Schwierigkeiten stoßen. Insbesondere kann sich das Überschreiben verschachtelter Objektwerte auf andere Objekte entlang der Prototypenkette auswirken und zu unerwarteten Ergebnissen führen.
Um das Problem zu veranschaulichen, betrachten Sie den folgenden Codeausschnitt:
// Flat object var flatObj = { firstname: "John", lastname: "Doe", age: 23 } // Nested object var nestObj = { sex: "female", info: { firstname: "Jane", lastname: "Dough", age: 32 } }
In diesem Szenario Das Erstellen neuer Objekte mit „Object.create“ und der Versuch, verschachtelte Objektwerte zu ändern, führt zu unbeabsichtigten Änderungen an den Prototypobjekten:
// Objects created using Object.create var person1 = Object.create(flatObj); // Flat object inheritance var person2 = Object.create(nestObj); // Nested object inheritance // Overwriting nested object values person1.age = 69; person2.info.age = 96; // Prototype objects have been modified console.log(nestObj.info.age); // Outputs 96 instead of 32
Das Kernproblem beruht auf der Tatsache, dass alle Objekte, auch verschachtelte, wie Standardobjekteigenschaften behandelt werden. Wenn Sie einen verschachtelten Objektwert ändern, wird die Änderung nicht nur an das aktuelle Objekt weitergegeben, sondern auch an alle anderen Objekte, die von demselben Prototyp erben.
Wenn Sie daher unabhängige verschachtelte Objekte beibehalten möchten, ist dies von entscheidender Bedeutung Erstellen Sie neue Objekte für sie, anstatt sich auf die Vererbung zu verlassen. Zum Beispiel:
// Creating an independent nested object person3 = { sex: "male", info: Object.create(nestObj2.info) // Create a new object for the nested "info" property }
Auf diese Weise stellen Sie sicher, dass Änderungen an verschachtelten Objektwerten nur das spezifische Objekt betreffen und sich nicht in der Prototypenkette nach oben verbreiten.
Das obige ist der detaillierte Inhalt vonWie vermeide ich unerwartetes Verhalten beim Ändern verschachtelter Objekte in Crockfords prototypischer Vererbung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!