„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum werden als Arrays prototypisierte JavaScript-Objektmitglieder von allen Klasseninstanzen gemeinsam genutzt?

Warum werden als Arrays prototypisierte JavaScript-Objektmitglieder von allen Klasseninstanzen gemeinsam genutzt?

Veröffentlicht am 22.12.2024
Durchsuche:805

Why do JavaScript Object Members Prototyped as Arrays Become Shared Across Class Instances?

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.

  • Weisen Sie dem Prototyp Eigenschaften zu, um gemeinsam genutzte Daten oder Methoden zu definieren.
  • Zuweisen Eigenschaften für die Instanz innerhalb des Konstruktors, um instanzspezifische Daten zu definieren.

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.

Neuestes Tutorial Mehr>

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