Heim  >  Artikel  >  Web-Frontend  >  Warum werden prototypische Arrays in JavaScript von allen Instanzen gemeinsam genutzt?

Warum werden prototypische Arrays in JavaScript von allen Instanzen gemeinsam genutzt?

Linda Hamilton
Linda HamiltonOriginal
2024-11-23 02:19:10226Durchsuche

Why Do Prototyped Arrays in JavaScript Become Shared Across Instances?

Prototypisierte Arrays in JavaScript: Instanzenübergreifend geteilt

In JavaScript ermöglicht Prototyping die gemeinsame Nutzung von Verhalten und Daten zwischen Instanzen von Klassen. Beim Prototyping von Arrays tritt jedoch ein einzigartiges Verhalten auf: Sie werden von allen Klasseninstanzen gemeinsam genutzt und sind nicht privat.

So funktioniert Prototyping:

Der Prototyp eines Objekts dient als Blaupause für die Erstellung neuer Objekte. Im Prototyp definierte Eigenschaften und Methoden sind für alle Objekte zugänglich, die von ihm erben. Dieses Konzept unterscheidet sich von klassenbasierten Sprachen, in denen Instanzen separate Kopien von Eigenschaften haben.

Im folgenden Beispiel erbt die Sandwich-Klasse vom Sandwich.prototype-Objekt:

function Sandwich() {

    // Uncomment to fix the problem
    //this.ingredients = [];

}
Sandwich.prototype = {

    "ingredients" : [],
    // ...
};

Hier die Die Zutateneigenschaft ist im Prototyp definiert. Das bedeutet, dass alle Instanzen (z. B. Cheeseburger, BLT usw.) dasselbe Array gemeinsam nutzen.

Gemeinsam genutzte Arrays:

Das Problem bei prototypischen Arrays besteht darin, dass eines geändert wird Das Array der Instanz wirkt sich auf alle anderen aus. Dies kann zu unerwartetem Verhalten führen, wie im Beispiel in der Frage beobachtet. Wenn entweder „cheeseburger.ingredients“ oder „blt.ingredients“ geändert wird, ändert sich das gleiche gemeinsame Array, das von Sandwich.prototype geerbt wurde.

So vermeiden Sie die Freigabe:

Um privat zu erstellen Arrays für jede Instanz definieren die Eigenschaft innerhalb des Konstruktors, nicht den Prototyp:

function Sandwich() {
    this.ingredients = [];
}

Hier die Zutaten Die Eigenschaft wird jeder neu erstellten Instanz zugewiesen, wodurch sie von anderen Instanzen unterschieden und isoliert wird.

Gemeinsame vs. instanzspezifische Daten:

Die allgemeine Regel ist die Zuweisung instanzspezifische Daten innerhalb des Konstruktors und gemeinsam genutzte Daten (z. B. Methoden) innerhalb des Prototyps. Dies ermöglicht kontrollierten Zugriff und Flexibilität beim Erstellen von Objekten.

Zusätzliche Hinweise:

  • Prototypeigenschaften werden intern über einen Zeiger auf das Prototypobjekt referenziert.
  • Der Zugriff auf den Prototyp eines Objekts ist mit Object.getPrototypeOf(obj) möglich.
  • Dieses Verhalten ist ist der prototypischen Vererbung in JavaScript eigen und gilt nicht für klassenbasierte Sprachen.

Das obige ist der detaillierte Inhalt vonWarum werden prototypische Arrays in JavaScript von allen Instanzen gemeinsam genutzt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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