Babel 中文文档
  • 印记中文
  • 文档
  • 配置
  • 试用
  • 视频
  • 博客
  • 赞助
  • 团队
  • GitHub

›TC39 提案

扩展

  • React Plugin
  • Flow Plugin
  • Typescript Plugin

模块

  • AMD
  • Common JS
  • SystemJS
  • UMD

TC39 提案

  • async-do-expressions
  • decorators
  • do-expressions
  • export-default-from
  • function-bind
  • function-sent
  • partial-application
  • pipeline-operator
  • private-methods
  • record-and-tuple
  • throw-expressions

@babel/preset-env

    ES2022

    • class-properties
    • class-static-block
    • private-property-in-object
    • syntax-top-level-await

    ES2021

    • logical-assignment-operators
    • numeric-separator

    ES2020

    • export-namespace-from
    • nullish-coalescing-operator
    • optional-chaining
    • syntax-bigint
    • syntax-dynamic-import
    • syntax-import-meta

    ES2019

    • optional-catch-binding
    • json-strings

    ES2018

    • async-generator-functions
    • object-rest-spread
    • unicode-property-regex
    • dotall-regex
    • named-capturing-groups-regex

    ES2017

    • async-to-generator

    ES2016

    • exponentiation-operator

    ES2015

    • arrow-functions
    • block-scoping
    • classes
    • computed-properties
    • destructuring
    • duplicate-keys
    • for-of
    • function-name
    • instanceof
    • literals
    • new-target
    • object-super
    • parameters
    • shorthand-properties
    • spread
    • sticky-regex
    • template-literals
    • typeof-symbol
    • unicode-escapes
    • unicode-regex

    ES5

    • property-mutators

    ES3

    • member-expression-literals
    • property-literals
    • reserved-words
Edit

@babel/plugin-proposal-function-bind

Detail

obj::func;
// is equivalent to:
func.bind(obj)

::obj.func;
// is equivalent to:
obj.func.bind(obj);

obj::func(val);
// is equivalent to:
func
  .call(obj, val)

::obj.func(val);
// is equivalent to:
obj.func.call(obj, val);

Example

Basic

const box = {
  weight: 2,
  getWeight() {
    return this.weight;
  },
};

const { getWeight } = box;

console.log(box.getWeight()); // prints '2'

const bigBox = { weight: 10 };
console.log(bigBox::getWeight()); // prints '10'

// Can be chained:
function add(val) {
  return this + val;
}

console.log(bigBox::getWeight()::add(5)); // prints '15'

Using with document.querySelectorAll

It can be very handy when used with document.querySelectorAll:

const { map, filter } = Array.prototype;

let sslUrls = document
  .querySelectorAll("a")
  ::map(node => node.href)
  ::filter(href => href.substring(0, 5) === "https");

console.log(sslUrls);

document.querySelectorAll returns a NodeList element which is not a plain array, so you normally can't use the map function on it, and have to use it this way: Array.prototype.map.call(document.querySelectorAll(...), node => { ... }). The above code using the :: will work because it is equivalent to:

const { map, filter } = Array.prototype;

let sslUrls = document.querySelectorAll("a");
sslUrls = map.call(sslUrls, node => node.href);
sslUrls = filter.call(sslUrls, href => href.substring(0, 5) === "https");

console.log(sslUrls);

Auto self binding

When nothing is specified before the :: operator, the function is bound to its object:

$(".some-link").on("click", ::view.reset);
// is equivalent to:
$(".some-link").on("click", view.reset.bind(view));

Installation

npm install --save-dev @babel/plugin-proposal-function-bind

Usage

With a configuration file (Recommended)

{
  "plugins": ["@babel/plugin-proposal-function-bind"]
}

Via CLI

babel --plugins @babel/plugin-proposal-function-bind script.js

Via Node API

require("@babel/core").transformSync("code", {
  plugins: ["@babel/plugin-proposal-function-bind"],
});

References

  • Proposal
  • Babel Blog: Function Bind Syntax
← export-default-fromfunction-sent →
  • Detail
  • Example
    • Basic
    • Using with document.querySelectorAll
    • Auto self binding
  • Installation
  • Usage
    • With a configuration file (Recommended)
    • Via CLI
    • Via Node API
  • References
Babel 中文文档
文档
学习 ES2015
社区
视频用户Stack OverflowSlack 频道Twitter
更多
博客GitHub 组织GitHub 仓库Website 仓库旧版网址 6.x旧版网址 5.x