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 globale Variableninstanz darstellt, die sowohl von JavaScript aus zugänglich ist als auch über eine oder mehrere WebAssembly.Module
Instanzen importiert/exportiert werden kann. 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 Variable darstellt. Dies kann einer der folgenden sein:i32
: Ein 32-Bit Ganzzahl.i64
: Ein 64-Bit Ganzzahl. (In JavaScript wird dies alsBigInt
dargestellt)f32
: Eine 32-Bit Gleitkommazahl.f64
: Eine 64-Bit Gleitkommazahl.v128
: Ein 128-Bit Vektor.externref
: Ein Hostverweis.anyfunc
: Ein Funktionsverweis.
mutable
: Ein boolescher Wert, der bestimmt, ob die globale Variable veränderlich ist oder nicht. Standardmäßig ist diesfalse
.
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 typisierter 0-Wert verwendet, wo der Wert von
descriptor.value
einer voni32
,i64
,f32
oderf64
ist, undnull
wird verwendet, wenndescriptor.value
externref
oderanyfunc
ist (gemäß demDefaultValue
Algorithmus).
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änderlicher i32
Typ definiert, mit einem Wert von 0.
Der Wert der globalen Variable wird dann geändert, zunächst auf 42
unter Verwendung der Global.value
Eigenschaft und dann auf 43 unter Verwendung der incGlobal()
Funktion, die aus dem global.wasm
Modul exportiert wird (dieses fügt dem gegebenen Wert 1 hinzu 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 ansehen; siehe auch den Quellcode.
Spezifikationen
Specification |
---|
WebAssembly JavaScript Interface # dom-global-global |