WebAssembly.Global
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
Objekt stellt eine globale Variable dar, die sowohl von JavaScript zugänglich als auch über eine oder mehrere WebAssembly.Module
Instanzen importierbar/exportierbar ist. Dies ermöglicht das dynamische Verknüpfen mehrerer Module.
Konstruktor
WebAssembly.Global()
-
Erstellt ein neues
Global
-Objekt.
Globale Instanzen
Alle Global
-Instanzen erben vom Prototyp-Objekt des Global()
Konstruktors – dies kann modifiziert werden, um alle Global
-Instanzen zu beeinflussen.
Instanzeigenschaften
Global.prototype.constructor
-
Gibt die Funktion zurück, die die Instanz dieses Objekts erstellt hat. Standardmäßig ist dies der
WebAssembly.Global()
Konstruktor. Global.prototype[Symbol.toStringTag]
-
Der Anfangswert der
[Symbol.toStringTag]
-Eigenschaft ist der String-Wert "WebAssembly.Global". Global.prototype.value
-
Der Wert, der innerhalb der globalen Variablen enthalten ist – dieser kann verwendet werden, um den Wert des Globals direkt zu setzen und abzurufen.
Instanzmethoden
Global.prototype.valueOf()
-
Eine alte Methode, die den Wert innerhalb der globalen Variablen zurückgibt.
Beispiele
Erstellen einer neuen Global-Instanz
Das folgende Beispiel zeigt eine neue globale Instanz, die mit dem WebAssembly.Global()
Konstruktor erstellt wird. Sie wird als veränderlicher i32
-Typ mit einem Wert von 0 definiert.
Der Wert des Globals 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 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 sehen; siehe auch den Quellcode.
Spezifikationen
Specification |
---|
WebAssembly JavaScript Interface # globals |
Browser-Kompatibilität
BCD tables only load in the browser