--- title: WebAssembly.Table() slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table tags: - API - Constructeur - JavaScript - Reference - WebAssembly - table translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table ---
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.
var monTableau = new WebAssembly.Table(descripteurTableau);
descripteurTableau
element
"anyfunc"
(pour indiquer des fonctions).initial
maximum {{optional_inline}}
tableDescriptor
n'est pas un objet, une exception {{jsxref("TypeError")}} sera levée.maximum
est défini et est inférieur à initial
, une exception {{jsxref("RangeError")}} sera levée.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
.
Table.prototype.constructor
Tabl
e
d'un incrément donné.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 {{jsxref("WebAssembly/Table/get", "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 {{jsxref("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 {{jsxref("WebAssembly.instantiateStreaming()")}}. 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 :
WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject) .then(function(obj) { 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écification | État | Commentaires |
---|---|---|
{{SpecName('WebAssembly JS', '#webassemblytable-objects', 'Table')}} | {{Spec2('WebAssembly JS')}} | Brouillon de définition initial pour WebAssembly. |
{{Compat("javascript.builtins.WebAssembly.Table")}}