Heim > Web-Frontend > js-Tutorial > Wie vermeide ich unerwartetes Verhalten beim Ändern verschachtelter Objekte in Crockfords prototypischer Vererbung?

Wie vermeide ich unerwartetes Verhalten beim Ändern verschachtelter Objekte in Crockfords prototypischer Vererbung?

Mary-Kate Olsen
Freigeben: 2024-12-31 08:57:09
Original
478 Leute haben es durchsucht

How to Avoid Unexpected Behavior When Modifying Nested Objects in Crockford's Prototypal Inheritance?

Crockfords prototypische Vererbung: Lösung von Verschachtelungsproblemen

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  
    }
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

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