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).
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,
);
},
);
Note : Cet exemple est utilisable sur GitHub et son code source est également disponible.
Spécifications
Specification |
---|
WebAssembly JavaScript Interface # globals |
Compatibilité des navigateurs
BCD tables only load in the browser