WebAssembly.Global()-Konstruktor
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.
Ein WebAssembly.Global()
-Konstruktor erstellt ein neues Global
-Objekt, das eine Instanz einer globalen Variablen darstellt. Diese ist sowohl von JavaScript aus zugänglich als auch importierbar/exportierbar über eine oder mehrere WebAssembly.Module
-Instanzen. 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
: Ein String, der den Datentyp der globalen Variablen darstellt. Dies kann einer der folgenden sein:i32
: Ein 32-Bit-Integer.i64
: Ein 64-Bit-Integer. (In JavaScript wird dies alsBigInt
dargestellt.)f32
: Eine 32-Bit-Gleitkommazahl.f64
: Eine 64-Bit-Gleitkommazahl.v128
: Ein 128-Bit-Vektor.externref
: Eine Host-Referenz.anyfunc
: Eine Funktionsreferenz.
mutable
: Ein booleanischer Wert, der bestimmt, ob die globale Variable änderbar ist oder nicht. Standardmäßig ist diesfalse
.
value
-
Der Wert, den die Variable enthält. Dieser kann beliebig sein, solange sein Typ dem Datentyp der Variablen entspricht. Wenn kein Wert angegeben ist, wird ein typisierter Wert von 0 verwendet, wenn der Wert von
descriptor.value
einer der folgenden ist:i32
,i64
,f32
oderf64
; undnull
wird verwendet, wenndescriptor.value
externref
oderanyfunc
ist (wie imDefaultValue
-Algorithmus festgelegt).
Beispiele
Erstellen einer neuen Global-Instanz
Das folgende Beispiel zeigt, wie eine neue globale Instanz mit dem WebAssembly.Global()
-Konstruktor erstellt wird. Sie wird als veränderbarer i32
-Typ definiert, mit einem Wert von 0.
Der Wert der globalen Variable wird dann zuerst auf 42
mit der Global.value
-Eigenschaft und dann auf 43 mittels der incGlobal()
-Funktion geändert, die aus dem global.wasm
-Modul exportiert wird (dies addiert 1 zu jedem 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
Specification |
---|
WebAssembly JavaScript Interface # dom-global-global |