WebAssembly.Table.prototype.set()
Die set()
Prototyp-Methode des WebAssembly.Table
-Objekts verändert eine Referenz, die an einem gegebenen Index gespeichert ist, zu einem anderen Wert.
Syntax
set(index, value)
Parameter
index
-
Der Index der Funktionsreferenz, den Sie ändern möchten.
value
-
Der Wert, auf den Sie die Referenz ändern möchten. Dies 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
- Wenn
index
größer oder gleich derTable.prototype.length
ist, wird einRangeError
ausgelöst. - Wenn
value
nicht vom Elementtyp der Tabelle ist, wird einTypeError
ausgelöst.
Beispiele
Verwendung von Table.set
Das folgende Beispiel (siehe table2.html Quellcode und Live-Version) erstellt eine neue WebAssembly-Tabelle mit einer anfänglichen Größe von zwei Referenzen. Wir geben 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 die Indizes derzeit keine Funktionsreferenzen enthalten (sie geben derzeit null
zurück).
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:
const importObj = {
js: { tbl },
};
Schließlich laden und instanziieren wir ein Wasm-Modul (table2.wasm) mit Hilfe von WebAssembly.instantiateStreaming()
, geben die Tabellenlänge aus und rufen die beiden 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 Textdarstellung:
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 Funktionsaufrufoperator am Ende des Accessors einfügen müssen, um die referenzierte Funktion tatsächlich auszuführen und den darin gespeicherten Wert zu protokollieren (z.B. get(0)()
anstatt get(0)
).
Dieses Beispiel zeigt, dass wir die Tabelle über JavaScript erstellen und darauf zugreifen, aber dieselbe Tabelle ist auch innerhalb der Wasm-Instanz sichtbar und aufrufbar.
Spezifikationen
Specification |
---|
WebAssembly JavaScript Interface # dom-table-set |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- WebAssembly Übersichtsseite
- WebAssembly-Konzepte
- Verwendung der WebAssembly JavaScript-API