WebAssembly.Table.prototype.set()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.

Die set() Prototyp-Methode des WebAssembly.Table-Objekts verändert eine gespeicherte Referenz an einem angegebenen Index zu einem anderen Wert.

Syntax

js
set(index, value)

Parameter

index

Der Index der Funktionsreferenz, die Sie ändern möchten.

value

Der Wert, auf den Sie die Referenz ändern möchten. Dieser muss ein Wert des Elementtyps der Tabelle sein. Abhängig vom Typ kann es sich um eine exportierte WebAssembly-Funktion, einen JavaScript-Wrapper für eine zugrunde liegende Wasm-Funktion oder eine Host-Referenz handeln.

Rückgabewert

Keiner (undefined).

Ausnahmen

Beispiele

Verwendung von Table.set

Das folgende Beispiel (siehe table2.html Quellcode und Live-Version) erstellt eine neue WebAssembly-Tabelleninstanz mit einer Anfangsgröße von zwei Referenzen. Wir drucken dann die Tabellenlänge und den Inhalt der beiden Indizes (abgerufen über Table.prototype.get()), um zu zeigen, dass die Länge zwei ist und die Indizes derzeit keine Funktionsreferenzen enthalten (sie geben derzeit null zurück).

js
const tbl = new WebAssembly.Table({ initial: 2, element: "anyfunc" });
console.log(tbl.length);
console.log(tbl.get(0));
console.log(tbl.get(1));

Wir erstellen dann ein Importobjekt, das eine Referenz auf die Tabelle enthält:

js
const importObj = {
  js: { tbl },
};

Schließlich laden und instanziieren wir ein Wasm-Modul (table2.wasm) mit WebAssembly.instantiateStreaming(), geben die Tabellenlänge aus und rufen die zwei referenzierten Funktionen auf, die jetzt in der Tabelle gespeichert sind. Das table2.wasm-Modul fügt der Tabelle zwei Funktionsreferenzen hinzu, die beide einen einfachen Wert ausgeben (siehe textuelle Darstellung):

js
WebAssembly.instantiateStreaming(fetch("table2.wasm"), importObject).then(
  (obj) => {
    console.log(tbl.length);
    console.log(tbl.get(0)());
    console.log(tbl.get(1)());
  },
);

Beachten Sie, dass Sie einen zweiten Funktionsaufrufsoperator am Ende des Accessors einfügen müssen, um die referenzierte Funktion tatsächlich aufzurufen und den darin gespeicherten Wert zu protokollieren (z. B. get(0)() anstelle von get(0)).

Dieses Beispiel zeigt, dass wir die Tabelle von JavaScript aus erstellen und darauf zugreifen, aber die gleiche Tabelle ist auch innerhalb der Wasm-Instanz sichtbar und aufrufbar.

Spezifikationen

Specification
WebAssembly JavaScript Interface
# dom-table-set

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
set

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch