WebAssembly.Table()

Cette fonction est expérimentale
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

Le constructeur WebAssembly.Table() permet de créer un nouvel objet Table.

Cet objet est une enveloppe JavaScript qui représente un tableau WebAssembly et qui contient des références à des fonctions. Un tableau créé en JavaScript ou dans du code WebAssembly sera accessible et modifiable depuis du code JavaScript et depuis du code WebAssembly.

Note : Actuellement, les tableaux WebAssembly peuvent uniquement stocker des références à des fonctions. Cette fonctionnalité sera vraisemblablement étendue par la suite.

Syntaxe

var monTableau = new WebAssembly.Table(descripteurTableau);

Paramètres

descripteurTableau
Un objet composé des propriétés qui suivent :
element
Une chaîne de caractères qui représente le type de référence enregistrée dans le tableau. Actuellement, la seule valeur possible est "anyfunc" (pour indiquer des fonctions).
initial
La longueur initiale du tableau WebAssembly. Cela correspond au nombre d'éléments contenus dans le tableau.
maximum Facultatif
La taille maximale que pourra avoir tableau WebAssembly s'il est étendu.

Exceptions

  • Si tableDescriptor n'est pas un objet, une exception TypeError sera levée.
  • Si maximum est défini et est inférieur à initial, une exception RangeError sera levée.

Instances de Table

Toutes les instances Table héritent des propriétés du prototype du constructeur Table(). Ce dernier peut être utilisé afin de modifier l'ensemble des instances Table.

Propriétés

Table.prototype.constructor
Renvoie la fonction qui a créé l'instance. Par défaut, c'est le constructeur WebAssembly.Table().
Table.prototype.length
Renvoie la longueur du tableau, c'est-à-dire le nombre de références qui sont enregistrées dans le tableau.

Méthodes

Table.prototype.get()
Une fonction d'accès qui permet d'obtenir l'élément du tableau situé à une position donnée.
Table.prototype.grow()
Cette méthode permet d'augmenter la taille du tableau Table d'un incrément donné.
Table.prototype.set()
Cette méthode permet de modifier un élément du tableau situé à une position donnée.

Exemples

Dans l'exemple qui suit (tiré du fichier table2.html et qui dispose d'une démonstration), on crée une nouvelle instance d'un tableau WebAssembly avec une taille initiale permettant de stocker 2 références. Ensuite, on imprime la longueur du tableau et le contenu des deux éléments (obtenus grâce à la méthode Table.prototype.get() afin de montrer que la longueur vaut 2 et que le tableau ne contient encore aucune référence de fonction (pour les deux positions, on a la valeur null).

var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"});
console.log(tbl.length);
console.log(tbl.get(0));
console.log(tbl.get(1));

Ensuite, on crée un objet d'import qui contient une référence au tableau :

var importObj = {
  js: {
    tbl:tbl
  }
};

Enfin, on charge et on instancie un module WebAssembly (table2.wasm) grâce à la fonction utilitaire fetchAndInstantiate(), on imprime la longueur du tableau dans la console et le contenu des deux premiers éléments du tableau. Le module table2.wasm a ajouté deux références de fonctions (cf. sa représentation textuelle). Chacune de ces fonctions fournit une valeur simple :

fetchAndInstantiate('table2.wasm', importObject).then(function(instance) {
  console.log(tbl.length);   // "2"
  console.log(tbl.get(0)()); // "42"
  console.log(tbl.get(1)()); // "83"
});

On voit ici qu'il faut d'abord récupérer la fonction puis effectuer une invocation pour obtenir la valeur correspondante à partir de l'accesseur (autrement dit, on écrit get(0)() plutôt que get(0) pour obtenir le résultat de la fonction) .

Dans cet exemple, on voit comment créer et manipuler le tableau depuis du code JavaScript mais ce même tableau est également accessible depuis l'instance WebAssembly.

Spécifications

Spécification État Commentaires
Web Assembly JavaScript API
La définition de 'Table' dans cette spécification.
Projet Brouillon de définition initial pour WebAssembly.

Compatibilité des navigateurs

Fonctionnalité Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support simple 57 Pas de support 52 (52)[1] Pas de support (Oui) Pas de support
Fonctionnalité Chrome pour Android Webview Android Edge Mobile Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple 57 57 Pas de support 52.0 (52)[1] Pas de support Pas de support Pas de support

[1] WebAssembly est activé dans Firefox 52+ mais est désactivé pour Firefox 52 Extended Support Release (ESR).

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight
 Dernière mise à jour par : SphinxKnight,