WebAssembly
===========

El objeto **`WebAssembly`** de JavaScript actua como un namespace para todas las funcionalidades realcionados con WebAssembly.

A diferencia de otros objetos globales, `WebAssembly` no tiene un constructor (no tiene una función para crear el objeto). Puedes ser comparado con el objeto `Math`, que también es un namespace, para funciones y constantes matemáticas, o también con `Intl` que es un namespace para internacionalización y otras funciones de idioma.

Descripción
-----------

Los usos primarios para el objeto `WebAssembly` son:

* Cargar código WebAssembly, utilizando la función `WebAssembly.instantiate()` (en-US).
* Crear nuevas instancias de memoria y de tablas mediante los constructores `WebAssembly.Memory()` (en-US)/`WebAssembly.Table()` (en-US).
* Facilitar el manejo de errores que ocurren dentro de un WebAssembly mediante los constructores:`WebAssembly.CompileError()` (en-US)/`WebAssembly.LinkError()` (en-US)/`WebAssembly.RuntimeError()` (en-US).
Métodos
-------

`WebAssembly.instantiate()` (en-US)

El API primaria para compilar e instanciar código WebAssembly, ambos regresan un `Module` y el primero `Instance`.

`WebAssembly.instantiateStreaming()` (en-US)

Compila e instancia un módulo WebAssembly directamente desde un flujo de origen subyacente, ambos regresan un `Module` y el primero `Instance`.

`WebAssembly.compile()` (en-US)

Compila un `WebAssembly.Module` (en-US) desde el código binario de un WebAssembly, manteniendo la creación de la instancia como un objeto separado.

`WebAssembly.compileStreaming()` (en-US)

compila un `WebAssembly.Module` (en-US) directamente desde un flujo de origen subyacente, manteniendo la creación de la instancia como un objeto sepraado.

`WebAssembly.validate()` (en-US)

Valida un arreglo con tipo de código binario de un WebAssembly, regresando si los bytes son código válido WebAssembly (`true`) o de lo contrario (`false`).

Constructores
-------------

`WebAssembly.Module()` (en-US)

Crea un nuevo objeto WebAssembly `Module`.

`WebAssembly.Instance()` (en-US)

Crear un nuevo objeto WebAssembly `Instance`.

`WebAssembly.Memory()` (en-US)

Crear un nuevo objeto WebAssembly `Memory`.

`WebAssembly.Table()` (en-US)

Crear un nuevo objeto WebAssembly `Table`.

`WebAssembly.CompileError()` (en-US)

Crear un nuevo objeto WebAssembly `CompileError`.

`WebAssembly.LinkError()` (en-US)

Crear un nuevo objeto WebAssembly `LinkError`.

`WebAssembly.RuntimeError()` (en-US)

Crear un nuevo objeto WebAssembly `RuntimeError`.

Ejemplos
--------

Después de obtener algún bytecode de WebAssembly usando la sentencia fetch, nosotros compilamos e instanciamos el módulo usando la función `WebAssembly.instantiate()` (en-US) , importando una función de JavaScript en el WebAssembly Module en el proceso. Esta premisa resuelve a un objeto (`result`) que contenga un objeto `Module` (en-US) compilado y un objeto `Instance` (en-US) . Entonces tenemos una llamada a Exported WebAssembly function (en-US) que es exportada por `Instance`.


```js
var importObject = {
  imports: {
    imported\_func: function (arg) {
      console.log(arg);
    },
  },
};

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => WebAssembly.instantiate(bytes, importObject))
  .then((result) => result.instance.exports.exported\_func());
```


**Nota:** Ver index.html en GitHub (view it live also) para un ejemplo que hace uso de la función `fetchAndInstantiate()`.

Especificaciones
----------------

| Specification |
| --- |
| WebAssembly JavaScript Interface # webassembly-namespace |

Compatibilidad con navegadores
------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Ver también
-----------

* Vista General de WebAssembly
* Conceptos de WebAssembly
* Uso de la API de JavaScript de WebAssembly (en-US)