--- 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);
descripteurTableauelement"anyfunc" (pour indiquer des fonctions).initialmaximum {{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.TableToutes 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.constructorTable 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")}}