Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

WebAssembly.Global

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-Objekt repräsentiert eine globale Variableninstanz, die sowohl von JavaScript aus zugänglich als auch über ein oder mehrere WebAssembly.Module-Instanzen importierbar/exportierbar ist. Dies ermöglicht die dynamische Verknüpfung 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.

Instanz-Eigenschaften

Global.prototype.value

Der Wert, der in der globalen Variablen enthalten ist. Dies kann verwendet werden, um den Wert des Global direkt zu setzen und abzurufen.

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 anfängliche Wert der [Symbol.toStringTag]-Eigenschaft ist der String-Wert "WebAssembly.Global".

Instanz-Methoden

Global.prototype.valueOf()

Gibt den Wert zurück, der in der globalen Variablen enthalten ist.

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änderlicher i32-Typ mit einem Wert von 0 definiert.

Der Wert der globalen Variablen wird dann geändert, zuerst auf 42 mithilfe der Global.value-Eigenschaft und dann auf 43 mithilfe der incGlobal()-Funktion, die aus dem global.wasm-Modul exportiert wird (dies fügt 1 zu jedem gegebenen 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

Spezifikation
WebAssembly JavaScript Interface
# globals

Browser-Kompatibilität

Siehe auch