WebAssembly.Global
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.
Syntaxe
var maGlobale = new WebAssembly.Global(descripteur, valeur);
Paramètres
descripteur
- Un dictionnaire
GlobalDescriptor
qui contient deux propriétés :value
: une valeurUSVString
qui représente le type de donnée de la variable globale. Ce type peut êtrei32
,i64
,f32
ouf64
.mutable
: un booléen qui indique si la variable globale peut être modifiée ou non. Par défaut, cette propriété vautfalse
.
valeur
- La valeur que la variable doit contenir. Ce peut être n'importe quelle valeur qui respecte le type de donnée de la variable. Si aucune valeur n'est indiquée, c'est une valeur nulle typée qui est utilisée, tel qu'indiqué dans l'algorithme
DefaultValue
.
Propriétés
Aucune.
Instances de WebAssembly.Global
Toutes les instances de Global
héritent du prototype du constructeur Global()
. Ce prototype peut être modifié afin d'avoir un impact sur l'ensemble des instances de Global
.
Propriétés des instances
Global.prototype.constructor
- Cette propriété renvoie la fonction qui a créé l'instance de l'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 à l'intérieur de la variable globale. Cette propriété peut être utilisée afin de modifier et d'accéder à la valeur globale.
Méthodes des instances
Global.prototype.valueOf()
- Une méthode qui renvoie la valeur contenue dans la variable globale.
Exemples
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, got, expected) {
output.innerHTML += `Testing ${msg}: `;
if (got !== expected)
output.innerHTML += `FAIL!<br>Got: ${got}<br>Expected: ${expected}<br>`;
else
output.innerHTML += `SUCCESS! Got: ${got}<br>`;
}
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);
});
Note : Cet exemple est utilisable sur GitHub et son code source est également disponible.
Spécifications
Spécification | État | Commentaires |
---|---|---|
WebAssembly JavaScript Interface La définition de 'WebAssembly.Global()' dans cette spécification. |
Version de travail | Brouillon de spécification initiale. |
Compatibilité des navigateurs
BCD tables only load in the browser