WebAssembly.Table() Konstruktor
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Oktober 2017.
Der WebAssembly.Table() Konstruktor erstellt ein neues Table-Objekt mit der angegebenen Größe und dem Elementtyp, gefüllt mit dem bereitgestellten Wert.
Syntax
new WebAssembly.Table(tableDescriptor)
new WebAssembly.Table(tableDescriptor, value)
Parameter
tableDescriptor-
Ein Objekt, das die folgenden Mitglieder enthalten kann:
element-
Ein String, der den Typ des gespeicherten Wertes in der Tabelle repräsentiert. Dies kann den Wert
"anyfunc"(Funktionen) oder"externref"(Host-Referenzen) haben. initial-
Die anfängliche Anzahl der Elemente der WebAssembly-Tabelle.
maximumOptional-
Die maximale Anzahl der Elemente, auf die die WebAssembly-Tabelle anwachsen darf.
valueOptional-
Das Element, mit dem der neu zugewiesene Speicherplatz gefüllt wird.
Ausnahmen
- Wenn
tableDescriptorkein Objekt ist, wird einTypeErrorausgelöst. - Wenn
maximumangegeben ist und kleiner alsinitialist, wird einRangeErrorausgelöst. - Wenn
elementnicht einer der Referenztypen ist, wird einTypeErrorausgelöst. - Wenn
valuekein Wert des Typselementist, wird einTypeErrorausgelöst.
Beispiele
Erstellen einer neuen WebAssembly-Tabelle
Das folgende Beispiel erstellt eine WebAssembly.Table-Instanz mit einer anfänglichen Größe von 2 Elementen. Der Inhalt der WebAssembly.Table wird mit einem WebAssembly-Modul befüllt und ist von JavaScript aus zugänglich. Wenn Sie das Live-Beispiel ansehen, öffnen Sie Ihre Entwicklerkonsole, um Konsolennachrichten aus den unten stehenden Code-Snippets anzuzeigen.
Dieses Beispiel verwendet die folgenden Referenzdateien:
table2.html: Eine HTML-Seite, die JavaScript enthält, das eineWebAssembly.Tableerstellt und manipuliert (Quellcode)table2.wat: Ein WebAssembly-Textformat-Modul, das in ein Binärformat konvertiert und vom JavaScript-Code intable2.htmlimportiert wird (Quellcode)
Hinweis: Eine vorab kompilierte WebAssembly-Binärdatei table2.wasm steht zum Download bereit.
In table2.html erstellen wir eine WebAssembly.Table:
const tbl = new WebAssembly.Table({
initial: 2,
element: "anyfunc",
});
Wir können die Indexinhalte mit Table.prototype.get() abrufen:
console.log(tbl.length); // a table with 2 elements
console.log(tbl.get(0)); // content for index 0 is null
console.log(tbl.get(1)); // content for index 1 is null
Als nächstes erstellen wir ein Importobjekt, das die WebAssembly.Table enthält:
const importObject = {
js: { tbl },
};
Dann laden und instanziieren wir ein WebAssembly-Modul. Das table2.wasm-Modul definiert eine Tabelle, die zwei Funktionen enthält. Die erste Funktion gibt 42 zurück, und die zweite gibt 83 zurück:
(module
(import "js" "tbl" (table 2 funcref))
(func $f42 (result i32) i32.const 42)
(func $f83 (result i32) i32.const 83)
(elem (i32.const 0) $f42 $f83)
)
Wir instanziieren table2.wasm mit der Methode WebAssembly.instantiateStreaming():
const instantiating = WebAssembly.instantiateStreaming(
fetch("table2.wasm"),
importObject,
);
Nach der Instanziierung von table2.wasm wird tbl mit Folgendem aktualisiert:
- Die Tabellengröße bleibt bei 2
- Der Inhalt für Index 0 ist jetzt eine Funktion, die 42 zurückgibt
- Der Inhalt für Index 1 ist jetzt eine Funktion, die 83 zurückgibt
Die Elemente an den Indizes 0 und 1 der Tabelle sind jetzt aufrufbare Exportierte WebAssembly-Funktionen. Um sie aufzurufen, beachten Sie, dass wir den Funktionsaufrufsoperator () nach dem get() Aufruf hinzufügen müssen:
instantiating.then((obj) => {
console.log(tbl.length); // 2
console.log(tbl.get(0)()); // 42
console.log(tbl.get(1)()); // 83
});
Während wir die WebAssembly.Table von JavaScript aus erstellen und auf sie zugreifen, ist dieselbe Table auch innerhalb der WebAssembly-Instanz sichtbar und aufrufbar.
Erstellen einer neuen WebAssembly-Tabelle mit einem Wert
Das folgende Beispiel erstellt eine neue WebAssembly-Tabelle mit 4 Elementen, gefüllt mit demselben Objekt:
const myObject = { hello: "world" };
const table = new WebAssembly.Table(
{
element: "externref",
initial: 4,
maximum: 4,
},
myObject,
);
console.log(myObject === table.get(2)); // true
Spezifikationen
| Specification |
|---|
| WebAssembly JavaScript Interface # dom-table-table |