Saltar al contenido principal

Sintaxis de Enlace de Funciones

· 3 min de lectura
Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Babel 5.4 acaba de ser lanzado e incluye soporte para una nueva sintaxis experimental de ES7 propuesta por Kevin Smith (@zenparsing) e implementada en Babel por Ingvar Stepanyan (@RReverser).

Advertencia: Esta sintaxis es altamente experimental y no deberías usarla para nada crítico (por ahora). Si decides usarla, por favor envía tus comentarios en GitHub.

La sintaxis de enlace de funciones introduce un nuevo operador :: que realiza enlace de funciones y extracción de métodos.

Métodos Virtuales

Usando una librería de iteradores implementada como módulo de "métodos virtuales":

JavaScript
/* ES7 */
import { map, takeWhile, forEach } from "iterlib";

getPlayers()
::map(x => x.character())
::takeWhile(x => x.strength > 100)
::forEach(x => console.log(x));
JavaScript
/* ES6 */
import { map, takeWhile, forEach } from "iterlib";

let _val;
_val = getPlayers();
_val = map.call(_val, x => x.character());
_val = takeWhile.call(_val, x => x.strength > 100);
_val = forEach.call(_val, x => console.log(x));

Nota: La salida de Babel difiere de este ejemplo para ser más concisa.

Usando una librería de métodos virtuales estilo jQuery:

JavaScript
/* ES7 */
// Create bindings for just the methods that we need
let { find, html } = jake;

// Find all the divs with class="myClass", then get all of the
// "p"s and replace their content.
document.querySelectorAll("div.myClass")::find("p")::html("hahaha");
JavaScript
/* ES6 */
let _val;
_val = document.querySelectorAll("div.myClass");
_val = find.call(_val, "p");
_val = html.call(_val, "hahaha");

Extracción de Métodos

Usando extracción de métodos para imprimir el valor eventual de una promesa en la consola:

JavaScript
/* ES7 */
Promise.resolve(123).then(::console.log);
JavaScript
/* ES6 */
// Which could be written in ES6 as:
Promise.resolve(123).then(console.log.bind(console));

Usando extracción de métodos para llamar a un método de objeto cuando ocurre un evento DOM:

JavaScript
/* ES7 */
$(".some-link").on("click", ::view.reset);
JavaScript
/* ES6 */
$(".some-link").on("click", view.reset.bind(view));

Nota: Puedes leer más sobre esta sintaxis en la propuesta de Sintaxis de Enlace de Funciones.

Uso

Habilitar por etapa:

Shell
$ babel --stage 0

Habilitar por transformador:

Shell
$ babel --optional es7.functionBind

La sintaxis de enlace de funciones solo se incluirá en ES7 si hay suficiente interés. Si deseas que esta sintaxis sea adoptada, por favor dale una estrella en GitHub y envía tus comentarios en GitHub issues.

Agradecimiento especial a Ingvar Stepanyan (@RReverser) por la implementación en Babel.

— The Babel team