Heim > Web-Frontend > js-Tutorial > Werden JavaScript-Objektmitglieder als freigegebene oder private Arrays prototypisiert?

Werden JavaScript-Objektmitglieder als freigegebene oder private Arrays prototypisiert?

Linda Hamilton
Freigeben: 2024-11-14 18:43:02
Original
1065 Leute haben es durchsucht

Are JavaScript Object Members Prototyped as Arrays Shared or Private?

Als Arrays prototypische JavaScript-Objektmitglieder: Gemeinsam genutzt oder privat?

In JavaScript können Objekteigenschaften auf zwei Arten definiert werden: direkt am Objekt oder als Eigenschaften des Prototyp des Objekts. Dieses Verhalten hat erhebliche Auswirkungen auf den Umgang mit Arrays.

Standardmäßig werden prototypische Arrays von allen Instanzen einer Klasse gemeinsam genutzt, was zu unerwartetem Verhalten führt. Wenn beispielsweise der Prototyp einer Klasse ein leeres Array enthält, verweisen alle Instanzen auf dasselbe Array. Dies kann im folgenden Beispiel beobachtet werden:

function Sandwich() {
  // Uncomment to fix the problem
  //this.ingredients = [];
}

Sandwich.prototype = {
  "ingredients": [],
  "addIngredients": function(ingArray) {
    for(var key in ingArray) {
      this.addIngredient(ingArray[key]);
    }
  },
  "addIngredient": function(thing) {
    this.ingredients.push(thing);
  }
};

var cheeseburger = new Sandwich();
cheeseburger.addIngredients(["burger", "cheese"]);

var blt = new Sandwich();
blt.addIngredients(["bacon", "lettuce", "tomato"]);

print_r("Cheeseburger contains:", cheeseburger.ingredients);
Nach dem Login kopieren

In diesem Beispiel haben sowohl Cheeseburger als auch Blt dasselbe Zutatenarray, obwohl es sich um unterschiedliche Instanzen handelt. Das Hinzufügen einer Zutat zum Cheeseburger wirkt sich auch auf BLT aus und unterstreicht die gemeinsame Natur des Arrays.

Um dieses Verhalten zu beheben, wird empfohlen, Arrays direkt am Objekt selbst und nicht als Prototypeigenschaften zu definieren. Dadurch wird sichergestellt, dass jede Instanz über ein eigenes privates Array verfügt. Die folgende Änderung am Code behebt das Problem:

function Sandwich() {
  this.ingredients = [];
}
Nach dem Login kopieren

Durch die Definition des Arrays im Konstruktor verfügt jede Instanz von Sandwich über eine eigene private Kopie des Arrays, wodurch das Freigabeverhalten entfällt.

Zusammenfassend lässt sich sagen, dass prototypische Arrays von allen Instanzen einer Klasse in JavaScript gemeinsam genutzt werden. Um für jede Instanz private Arrays zu erstellen, ist es notwendig, das Array direkt am Objekt selbst im Konstruktor zu definieren. Diese Unterscheidung ist entscheidend für das Verständnis und die Verwaltung des Objektverhaltens in JavaScript.

Das obige ist der detaillierte Inhalt vonWerden JavaScript-Objektmitglieder als freigegebene oder private Arrays prototypisiert?. 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