WebAssembly.Global() Konstruktor
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2020 browserübergreifend verfügbar.
Ein WebAssembly.Global() Konstruktor erstellt ein neues Global Objekt, das eine globale Variableninstanz darstellt, die sowohl aus JavaScript zugänglich als auch über eine oder mehrere WebAssembly.Module Instanzen importierbar/exportierbar ist. Dies ermöglicht die dynamische Verknüpfung mehrerer Module.
Syntax
new WebAssembly.Global(descriptor, value)
Parameter
descriptor-
Ein Objekt, das zwei Eigenschaften enthält:
value-
Der Wert, den die Variable enthält. Dies kann jeder Wert sein, solange sein Typ mit dem Datentyp der Variablen übereinstimmt. Wenn kein Wert angegeben ist:
- wird ein typisiertes
0verwendet, wenndescriptor.valuei32,i64,f32oderf64ist - wird ein Verweis auf
undefinedverwendet, wenndescriptor.valueexternrefist - wird
nullverwendet, wenndescriptor.valuefuncrefist
- wird ein typisiertes
Ausnahmen
TypeError-
Wird ausgelöst, wenn eine der folgenden Bedingungen erfüllt ist:
descriptorist kein Objekt.descriptor.valuefehlt oder ist kein gültiger Werttyp (wie zum Beispiel"v128").valueist angegeben, kann aber nicht in den vondescriptor.valuebenannten WebAssembly-Typ konvertiert werden.
Beispiele
>Erstellen einer neuen Global-Instanz
Das folgende Beispiel zeigt eine neue globale Instanz, die mit dem WebAssembly.Global()-Konstruktor erstellt wird.
Es wird als veränderbarer i32 Typ mit einem Wert von 0 definiert.
Der Wert der globalen Variable wird dann geändert, zuerst auf 42 mit der Global.value-Eigenschaft und dann auf 43 mit der incGlobal()-Funktion, die aus dem global.wasm-Modul exportiert wird (dies addiert 1 zu dem gegebenen Wert und gibt dann den neuen Wert zurück).
const output = document.getElementById("output");
function assertEq(msg, got, expected) {
const result =
got === expected
? `SUCCESS! Got: ${got}\n`
: `FAIL!\nGot: ${got}\nExpected: ${expected}\n`;
output.innerText += `Testing ${msg}: ${result}`;
}
assertEq("WebAssembly.Global exists", typeof WebAssembly.Global, "function");
const global = new WebAssembly.Global({ value: "i32", mutable: true }, 0);
WebAssembly.instantiateStreaming(fetch("global.wasm"), { js: { global } }).then(
({ instance }) => {
assertEq(
"getting initial value from wasm",
instance.exports.getGlobal(),
0,
);
global.value = 42;
assertEq(
"getting JS-updated value from wasm",
instance.exports.getGlobal(),
42,
);
instance.exports.incGlobal();
assertEq("getting wasm-updated value from JS", global.value, 43);
},
);
Hinweis: Sie können das Beispiel live auf GitHub ausführen; siehe auch den Quellcode.
Spezifikationen
| Spezifikation |
|---|
| WebAssembly JavaScript Interface> # dom-global-global> |
Browser-Kompatibilität
Siehe auch
globalDefinition- WebAssembly Übersicht
- WebAssembly Konzepte
- Verwendung der WebAssembly-JavaScript-API