Sintaxis de Enlace de Funciones
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":
/* ES7 */
import { map, takeWhile, forEach } from "iterlib";
getPlayers()
::map(x => x.character())
::takeWhile(x => x.strength > 100)
::forEach(x => console.log(x));
/* 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:
/* 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");
/* 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:
/* ES7 */
Promise.resolve(123).then(::console.log);
/* 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:
/* ES7 */
$(".some-link").on("click", ::view.reset);
/* 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:
$ babel --stage 0
Habilitar por transformador:
$ 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