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 mit privaten Objektmitgliedern vertraut 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 = []; }
Wenn die kommentierte Zeile nicht kommentiert wäre, 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, zwischen Prototypeigenschaften und Instanzeigenschaften zu unterscheiden. 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 Verhalten
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.
Schlussfolgerung
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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3