WebAssembly.Table
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.
Das WebAssembly.Table
Objekt ist ein JavaScript-Wrapper-Objekt – eine array-ähnliche Struktur, die eine WebAssembly-Tabelle darstellt, welche homogene Referenzen speichert. Eine von JavaScript oder in WebAssembly-Code erstellte Tabelle ist sowohl von JavaScript als auch von WebAssembly zugänglich und veränderbar.
Hinweis: Tabellen können derzeit nur Funktionsreferenzen oder Host-Referenzen speichern, aber dies wird wahrscheinlich in Zukunft erweitert.
Konstruktor
WebAssembly.Table()
-
Erstellt ein neues
Table
Objekt.
Instanzeigenschaften
Table.prototype.length
Schreibgeschützt-
Gibt die Länge der Tabelle zurück, das heißt die Anzahl der Elemente in der Tabelle.
Instanzmethoden
Table.prototype.get()
-
Zugriffsfunktion – holt das Element, das an einem bestimmten Index gespeichert ist.
Table.prototype.grow()
-
Erhöht die Größe der
Table
Instanz um eine angegebene Anzahl von Elementen. Table.prototype.set()
-
Setzt ein Element, das an einem bestimmten Index gespeichert ist, auf einen angegebenen Wert.
Beispiele
Erstellen einer neuen WebAssembly Table Instanz
Das folgende Beispiel (siehe table2.html Quellcode und Live-Version) erstellt eine neue WebAssembly Table Instanz mit einer Anfangsgröße von 2 Elementen. Wir drucken dann die Tabellenlänge und den Inhalt der beiden Indizes aus (abgerufen über Table.prototype.get()
), um zu zeigen, dass die Länge zwei ist und beide Elemente null
sind.
const tbl = new WebAssembly.Table({ initial: 2, element: "anyfunc" });
console.log(tbl.length); // "2"
console.log(tbl.get(0)); // "null"
console.log(tbl.get(1)); // "null"
Dann erstellen wir ein Import-Objekt, das die Tabelle enthält:
const importObj = {
js: { tbl },
};
Abschließend laden und instanziieren wir ein Wasm-Modul (table2.wasm) mit der Methode WebAssembly.instantiateStreaming()
. Das table2.wasm-Modul enthält zwei Funktionen (eine, die 42 zurückgibt, und eine andere, die 83 zurückgibt) und speichert beide in den Elementen 0 und 1 der importierten Tabelle (siehe Textdarstellung). Nach der Instanziierung hat die Tabelle immer noch die Länge 2, aber die Elemente enthalten nun aufrufbare Exportierte WebAssembly-Funktionen, die wir aus JS aufrufen können.
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 Zugriffs verwenden 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 dieselbe Tabelle auch innerhalb der Wasm-Instanz sichtbar und aufrufbar ist.
Spezifikationen
Specification |
---|
WebAssembly JavaScript Interface # tables |