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.

Un objet WebAssembly.Global représente une instance d'une variable globale, accessible depuis le code JavaScript et importable/exportable pour un ou plusieurs modules WebAssembly (WebAssembly.Module). Cela permet de lier dynamiquement plusieurs modules.

Constructeur

WebAssembly.Global()

Crée un nouvel objet Global.

Instances Global

Toutes les instances de Global héritent du prototype du constructeur Global(), ce dernier peut être modifié afin de modifier le comportement de l'ensemble des instances Global.

Propriétés des instances

Global.prototype.constructor

Renvoie la fonction qui a créé cette instance d'objet. Par défaut, c'est le constructeur WebAssembly.Global().

Global.prototype[@@toStringTag]

La valeur initiale de la propriété @@toStringTag est la chaîne de caractères "WebAssembly.Global".

Global.prototype.value

La valeur contenue au sein de la variable globale. Elle peut être utilisée pour récupérer ou modifier la valeur de la variable globale.

Méthodes des instances

Global.prototype.valueOf()

Une méthode ancienne qui renvoie la valeur contenue au sein de la variable globale.

Exemples

Créer une nouvelle instance Global

Dans l'exemple suivant, on montre comment créer une nouvelle instance globale grâce au constructeur WebAssembly.Global(). Cette instance globale est définie avec le type i32 et est indiquée comme modifiable. Sa valeur initiale est 0.

On change ensuite la valeur de la variable globale en la passant à 42 grâce à la propriété Global.value puis en la passant à 43 grâce à la fonction incGlobal() qui a été exportée depuis le module global.wasm (cette fonction ajoute 1 à n'imorte quelle valeur puis renvoie cette nouvelle valeur).

js
const output = document.getElementById("output");

function assertEq(msg, res, attendu) {
  output.innerHTML += `Test ${msg} : `;
  if (res !== attendu)
    output.innerHTML += `ÉCHEC !<br>Résultat : ${res}<br>Attendu : ${attendu}<br>`;
  else output.innerHTML += `SUCCÈS ! Résultat : ${res}<br>`;
}

assertEq(
  "Existence de WebAssembly.Global",
  typeof WebAssembly.Global,
  "function",
);

const global = new WebAssembly.Global({ value: "i32", mutable: true }, 0);

WebAssembly.instantiateStreaming(fetch("global.wasm"), { js: { global } }).then(
  ({ instance }) => {
    assertEq(
      "Obtention de la valeur initiale depuis wasm",
      instance.exports.getGlobal(),
      0,
    );
    global.value = 42;
    assertEq(
      "Obtention de la valeur mise à jour en JS depuis wasm",
      instance.exports.getGlobal(),
      42,
    );
    instance.exports.incGlobal();
    assertEq(
      "Obtention de la valeur mise à jour côté wasm en JS",
      global.value,
      43,
    );
  },
);

Spécifications

Specification
WebAssembly JavaScript Interface
# globals

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi