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