Heim >Web-Frontend >js-Tutorial >Wie vermeide ich die Referenzübergabe bei der Verwendung von Array.prototype.fill() mit Objekten?

Wie vermeide ich die Referenzübergabe bei der Verwendung von Array.prototype.fill() mit Objekten?

Linda Hamilton
Linda HamiltonOriginal
2025-01-01 13:17:10296Durchsuche

How to Avoid Reference Passing When Using Array.prototype.fill() with Objects?

Übergabe von Objekten an Array.prototype.fill() per Referenz

Beim Initialisieren eines Arrays mit einer festen Länge mit der Methode fill() , führt die Zuweisung eines Objekts als Wert dazu, dass alle Array-Elemente auf dasselbe Objekt verweisen, anstatt neue Instanzen zu erstellen. Dies kann zu unbeabsichtigtem Verhalten beim Ändern von Array-Elementen führen.

Beispiel:

var arr = new Array(2).fill({});

console.log(arr[0] === arr[1]); // true
arr[0].test = 'string';
console.log(arr[1].test); // 'string'

Referenzübergabe vermeiden:

Um ein Array von Objekten zu erstellen, bei dem jedes Element eine eigene Instanz ist, vermeiden Sie die direkte Verwendung von fill() mit einem Objekt. Befolgen Sie stattdessen diese alternativen Ansätze:

Map-Funktion:

Füllen Sie das Array mit einem Platzhalterwert (z. B. undefiniert) und verwenden Sie map(), um jedes Element in umzuwandeln ein neues Objekt:

var arr = new Array(2).fill().map(u => ({}));

Object Factory Funktion:

Verwenden Sie eine Funktion, die ein neues Objekt zurückgibt, um das Array zu füllen:

var arr = new Array(2).fill().map(Object);

Durch den Einsatz dieser Techniken können Sie sicherstellen, dass jedes Element im Array ein Individuum ist Objekt, um eine unbeabsichtigte Referenzübergabe zu vermeiden und die Objektisolation aufrechtzuerhalten.

Das obige ist der detaillierte Inhalt vonWie vermeide ich die Referenzübergabe bei der Verwendung von Array.prototype.fill() mit Objekten?. 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