Als Arrays prototypisierte JavaScript-Objektmitglieder: Von allen Klasseninstanzen gemeinsam genutzt
Beim Prototyping von Arrays in JavaScript ist es wichtig zu verstehen, dass diese Mitglieder gemeinsam genutzt werden unter allen Klasseninstanzen. Dieses Verhalten mag kontraintuitiv erscheinen, wenn Sie an private Objektmitglieder gewöhnt sind.
Erklärung des Verhaltens
Der Prototypmechanismus von JavaScript ermöglicht es Objekten, Eigenschaften und Methoden von einem übergeordneten Objekt zu erben. bekannt als Prototyp. Wenn Sie ein Array als Eigenschaft im Prototyp definieren, wird es für alle Objekte zugänglich, die von diesem Prototyp erben.
Das Beispielskript demonstriert dieses Verhalten:
function Sandwich() { // Uncomment this to fix the problem //this.ingredients = []; }
Mit der kommentierten Zeile Ohne Kommentar hätte jede Sandwich-Instanz ihr eigenes privates Zutaten-Array. Wenn die Zeile jedoch auskommentiert ist, verwenden alle Instanzen dasselbe Prototyp-Array.
Das bedeutet, dass durch das Hinzufügen einer Zutat zu Cheeseburger auch die Zutaten von blt und Spicy_chicken_sandwich aktualisiert werden. Um dies zu verhindern, müssen Sie das Zutaten-Array im Konstruktor definieren, wie im aktualisierten Beispiel unten gezeigt:
function Sandwich() { this.ingredients = []; }
Prototyp vs. Instanz
Es ist wichtig, dass Unterscheiden Sie zwischen Prototypeigenschaften und Instanzeigenschaften. Prototypeigenschaften werden von allen Objekten gemeinsam genutzt, die von diesem Prototyp erben, während Instanzeigenschaften für jedes Objekt einzigartig sind.
Codeänderungen zur Behebung des Verhaltens
Entkommentieren Sie im Beispielskript die Zeile this .ingredients = []; innerhalb des Sandwich-Konstruktors stellt sicher, dass jede Instanz wie vorgesehen über ihr eigenes Zutaten-Array verfügt.
Fazit
Das Verständnis des Verhaltens von Prototyp-Arrays in JavaScript ist entscheidend, um unerwartete gemeinsame Nutzung zu vermeiden zwischen Klasseninstanzen. Denken Sie immer daran, dass Daten, die instanzspezifisch sein sollten, innerhalb des Konstruktors definiert werden sollten, während gemeinsam genutzte Daten dem Prototyp durch Vererbung zugewiesen werden können.
Das obige ist der detaillierte Inhalt vonWarum werden als Arrays prototypische JavaScript-Objektmitglieder von allen Klasseninstanzen gemeinsam genutzt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!