Probleme mit verschachtelten Objekten in Crockfords prototypischem Vererbungsmuster
Douglas Crockfords prototypisches Vererbungsmuster ist eine vereinfachte Alternative zum integrierten „neuen“ Schlüsselwort in JavaScript. Allerdings können beim Versuch, mit diesem Muster von verschachtelten Objekten zu erben, Probleme auftreten.
Bei diesem Vererbungsmuster wird der Prototyp eines Zielobjekts auf ein anderes Objekt festgelegt und erbt dessen Eigenschaften. Wenn eine verschachtelte Eigenschaft im Zielobjekt überschrieben wird, wird die Änderung in der gesamten Prototypenkette weitergegeben. Dieses Verhalten steht im Widerspruch zur erwarteten Vorstellung von verschachtelten Objekten.
Betrachten Sie das bereitgestellte Beispiel:
var nestObj = { sex: "female", info: { firstname: "Jane", lastname: "Dough", age: 32, }, }; var person2 = Object.create(nestObj);
Wenn die Eigenschaft person2.info.age überschrieben wird, ändert sich auch das Alter des Objekts verschachteltes Objekt im Prototyp (nestObj.info.age). Dies kann unerwartet sein.
Der Antwort zufolge handelt es sich bei diesem Verhalten nicht um eine Inkonsistenz. Verschachtelte Objekte gelten nicht als eigenständige Einheiten. Stattdessen handelt es sich entweder um eigene Eigenschaften des Objekts oder um vom Prototyp geerbte Eigenschaften. Das Überschreiben eines Eigenschaftswerts auf einem verschachtelten Objekt wirkt sich sowohl auf die eigene Eigenschaft als auch auf die geerbte Eigenschaft aus.
Um eine verschachtelte Eigenschaft unabhängig zu ändern, muss ihr eine neue Objektreferenz zugewiesen werden.
person2.info = { firstname: "Jane", lastname: "Dough", age: 32, };
Dies Erstellt ein neues verschachteltes Objekt, das vom Prototyp unabhängig ist. Das Überschreiben von Eigenschaften dieses neuen Objekts hat keine Auswirkungen auf den Prototyp.
Das obige ist der detaillierte Inhalt vonWarum wirkt sich das Überschreiben verschachtelter Objekte in Crockfords prototypischem Vererbungsmuster auf den Prototyp aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!