Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. Web-APIs
  3. Window
  4. structuredClone()

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

Window: structuredClone() Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since März 2022.

DiestructuredClone()-Methode derWindow-Schnittstelle erstellt einetiefe Kopie eines gegebenen Werts unter Verwendung desstructured clone algorithmus.

Die Methode ermöglicht auch, dassübertragbare Objekte im ursprünglichen Wertübertragen anstatt geklont werden. Übertragene Objekte werden vom ursprünglichen Objekt getrennt und dem neuen Objekt zugeordnet; sie sind im ursprünglichen Objekt nicht mehr zugänglich.

Syntax

js
structuredClone(value)structuredClone(value, options)

Parameter

value

Das zu klonende Objekt. Dies kann jederstrukturklonbare Typ sein.

optionsOptional

Ein Objekt mit den folgenden Eigenschaften:

transfer

Ein Array vonübertragbaren Objekten, die anstatt geklont, in das zurückgegebene Objekt verschoben werden.

Rückgabewert

Einetiefe Kopie des ursprünglichenvalue.

Ausnahmen

DataCloneErrorDOMException

Wird ausgelöst, wenn ein Teil des Eingabewertes nicht serialisierbar ist.

Beschreibung

Diese Funktion kann verwendet werden, um JavaScript-Wertetief zu kopieren.Sie unterstützt auch zirkuläre Referenzen, wie unten gezeigt:

js
// Create an object with a value and a circular reference to itself.const original = { name: "MDN" };original.itself = original;// Clone itconst clone = structuredClone(original);console.assert(clone !== original); // the objects are not the same (not same identity)console.assert(clone.name === "MDN"); // they do have the same valuesconsole.assert(clone.itself === clone); // and the circular reference is preserved

Übertragen von Werten

Übertragbare Objekte (nur) können anstelle der Duplizierung im geklonten Objekt übertragen werden, indem dietransfer-Eigenschaft desoptions-Parameters verwendet wird. Das Übertragen macht das ursprüngliche Objekt unbrauchbar.

Hinweis:Ein Szenario, in dem dies nützlich sein könnte, ist, wenn Daten in einem Puffer asynchron validiert werden, bevor sie gespeichert werden. Um zu vermeiden, dass der Puffer verändert wird, bevor die Daten gespeichert werden, können Sie den Puffer klonen und diese Daten validieren. Wenn Sie die Daten auchübertragen, werden alle Versuche, den ursprünglichen Puffer zu ändern, fehlschlagen, was einen versehentlichen Missbrauch verhindert.

Der folgende Code zeigt, wie man ein Array klont und dessen zugrunde liegende Ressourcen in das neue Objekt überträgt. Nach der Rückkehr wird der ursprünglicheuInt8Array.buffer geleert.

js
// 16MB = 1024 * 1024 * 16const uInt8Array = Uint8Array.from({ length: 1024 * 1024 * 16 }, (v, i) => i);const transferred = structuredClone(uInt8Array, {  transfer: [uInt8Array.buffer],});console.log(uInt8Array.byteLength); // 0

Sie können beliebig viele Objekte klonen und einen Teil dieser Objekte übertragen. Zum Beispiel würde der untenstehende CodearrayBuffer1 aus dem übergebenen Wert übertragen, jedoch nichtarrayBuffer2.

js
const transferred = structuredClone(  { x: { y: { z: arrayBuffer1, w: arrayBuffer2 } } },  { transfer: [arrayBuffer1] },);

Beispiele

Klonen eines Objekts

In diesem Beispiel klonen wir ein Objekt mit einem Mitglied, welches ein Array ist. Nach dem Klonen beeinflussen Änderungen an jedem Objekt nicht das andere Objekt.

js
const mushrooms1 = {  amanita: ["muscaria", "virosa"],};const mushrooms2 = structuredClone(mushrooms1);mushrooms2.amanita.push("pantherina");mushrooms1.amanita.pop();console.log(mushrooms2.amanita); // ["muscaria", "virosa", "pantherina"]console.log(mushrooms1.amanita); // ["muscaria"]

Übertragen eines Objekts

In diesem Beispiel erstellen wir einArrayBuffer und klonen dann das Objekt, dessen Mitglied es ist, wobei der Puffer übertragen wird. Wir können den Puffer im geklonten Objekt verwenden, aber wenn wir versuchen, den ursprünglichen Puffer zu verwenden, erhalten wir eine Ausnahme.

js
// Create an ArrayBuffer with a size in bytesconst buffer = new ArrayBuffer(16);const object1 = {  buffer,};// Clone the object containing the buffer, and transfer itconst object2 = structuredClone(object1, { transfer: [buffer] });// Create an array from the cloned bufferconst int32View2 = new Int32Array(object2.buffer);int32View2[0] = 42;console.log(int32View2[0]);// Creating an array from the original buffer throws a TypeErrorconst int32View1 = new Int32Array(object1.buffer);

Spezifikationen

Specification
HTML
# dom-structuredclone

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2026 Movatter.jp