Heim > Web-Frontend > js-Tutorial > Hauptteil

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

Patricia Arquette
Freigeben: 2024-11-13 07:26:02
Original
629 Leute haben es durchsucht

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 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 = [];
}
Nach dem Login kopieren

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 = [];
}
Nach dem Login kopieren

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.

  • 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 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!

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