Constructeur 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.
Le constructeur WebAssembly.Global()
permet de créer un nouvel objet Global
représentant une instance d'une variable globale, accessible depuis le code JavaScript et importable/exportable dans plusieurs instances de WebAssembly.Module
. Cela permet la liaison dynamique de plusieurs modules.
Syntaxe
new WebAssembly.Global(descripteur, valeur);
Paramètres
- descripteur
-
Un objet dictionnaire
GlobalDescriptor
qui contient deux propriétés :value
: Une chaîneUSVString
représentant le type de données de la variable globale. Elle peut êtrei32
,i64
,f32
, ouf64
.USVString
correspond à l'ensemble des différentes séquences Unicode scalaires possibles.USVString
correspond àString
lorsqu'il est renvoyé en JavaScript et est un type généralement utilisé par les API qui effectuent du traitement de texte et qui ont besoin de manipuler une chaîne de valeurs Unicode scalaire.USVString
est équivalent àDOMString
sauf qu'il n'accepte pas les codets surrogate non appairés. De tels caractères présents dans une valeurUSVString
seront convertis par le navigateur en caractères de remplacement Unicode : U+FFFD, (�).mutable
: Une valeur booléenne qui indique si la variable globale est modifiable ou non. Par défaut, elle vautfalse
.
- valeur
-
La valeur que contient la variable. Ce peut être n'importe quelle valeur dont le type correspond au type de données de la variable. Si aucune valeur n'est indiquée, c'est une valeur 0 typée qui est utilisée, comme indiqué dans l'algorithme
DefaultValue
.
Exemples
Créer une nouvelle instance de Global
L'exemple suivant illustre une nouvelle instance de variable globale créée avec le constructeur WebAssembly.Global()
. Dans cet exemple, on définit une variable globale modifiable, de type i32
avec une valeur initiale à 0.
La valeur de la variable globale est ensuite changée : d'abord en 42
avec la propriété Global.value
, puis en 43
avec la fonction incGlobal()
qu'on a exportée du module global.wasm
(cette fonction ajoute 1 à toute valeur qui lui est fournie et renvoie la valeur obtenue).
const output = document.getElementById("output");
function assertEq(msg, got, expected) {
output.innerHTML += `Test ${msg}: `;
if (got !== expected)
output.innerHTML += `ÉCHEC !<br>Résultat ${got}<br>Attendu : ${expected}<br>`;
else output.innerHTML += `SUCCÈS ! Résultat ${got}<br>`;
}
assertEq("WebAssembly.Global existe", typeof WebAssembly.Global, "function");
const global = new WebAssembly.Global({ value: "i32", mutable: true }, 0);
WebAssembly.instantiateStreaming(fetch("global.wasm"), { js: { global } }).then(
({ instance }) => {
assertEq(
"Obtenir une valeur initiale WASM",
instance.exports.getGlobal(),
0,
);
global.value = 42;
assertEq(
"Obtenir une valeur mise à jour depuis le code JS",
instance.exports.getGlobal(),
42,
);
instance.exports.incGlobal();
assertEq(
"Obtenir une valeur mise à jour depuis le code WASM",
global.value,
43,
);
},
);
Note : Voir l'exemple live sur GitHub et aussi le code source.
Spécifications
Specification |
---|
WebAssembly JavaScript Interface # dom-global-global |
Compatibilité des navigateurs
BCD tables only load in the browser