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 Instanz einer globalen Variablen dar, die sowohl von JavaScript aus zugänglich ist als auch über eine oder mehrere WebAssembly.Module-Instanzen importiert oder exportiert werden kann. Dies ermöglicht das dynamische Verknüpfen mehrerer Module.

Konstruktor

WebAssembly.Global()

Erstellt ein neues Global-Objekt.

Globale Instanzen

Alle Global-Instanzen erben von dem Prototyp-Objekt des Global()-Konstruktors — dies kann geändert 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 in der globalen Variable enthalten ist — dieser kann verwendet werden, um den Wert der globalen Variable direkt zu setzen und abzurufen.

Instanzmethoden

Global.prototype.valueOf()

Althergebrachte Methode, die den in der globalen Variable enthaltenen Wert zurückgibt.

Beispiele

Erstellen einer neuen Global-Instanz

Das folgende Beispiel zeigt die Erstellung einer neuen globalen Instanz mit dem WebAssembly.Global() Konstruktor. Sie wird als mutable i32-Typ mit einem Wert von 0 definiert.

Der Wert der globalen Variable wird dann zuerst mit der Global.value-Eigenschaft auf 42 geändert und anschließend auf 43 mit der incGlobal()-Funktion geändert, die aus dem global.wasm Modul exportiert wird (dies fügt 1 zu dem übergebenen Wert hinzu und gibt dann den neuen Wert zurück).

js
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
# globals

Browser-Kompatibilität

Siehe auch