# Conflicts: # CONTRIBUTING.md # Makefile # README.md # lerna.json # lib/types.js # package.json # packages/babel-cli/package.json # packages/babel-code-frame/package.json # packages/babel-core/package.json # packages/babel-core/test/fixtures/transformation/misc/regression-2892/expected.js # packages/babel-generator/package.json # packages/babel-generator/src/generators/flow.js # packages/babel-generator/src/index.js # packages/babel-generator/test/fixtures/flow/declare-statements/expected.js # packages/babel-generator/test/fixtures/flow/object-literal-types/expected.js # packages/babel-generator/test/fixtures/flow/opaque-type-alias/expected.js # packages/babel-helper-bindify-decorators/package.json # packages/babel-helper-builder-binary-assignment-operator-visitor/package.json # packages/babel-helper-builder-conditional-assignment-operator-visitor/package.json # packages/babel-helper-builder-react-jsx/package.json # packages/babel-helper-call-delegate/package.json # packages/babel-helper-define-map/package.json # packages/babel-helper-explode-assignable-expression/package.json # packages/babel-helper-explode-class/package.json # packages/babel-helper-fixtures/package.json # packages/babel-helper-function-name/package.json # packages/babel-helper-get-function-arity/package.json # packages/babel-helper-hoist-variables/package.json # packages/babel-helper-optimise-call-expression/package.json # packages/babel-helper-plugin-test-runner/package.json # packages/babel-helper-regex/package.json # packages/babel-helper-remap-async-to-generator/package.json # packages/babel-helper-replace-supers/package.json # packages/babel-helper-transform-fixture-test-runner/package.json # packages/babel-helpers/package.json # packages/babel-plugin-transform-async-generator-functions/package.json # packages/babel-plugin-transform-async-to-generator/package.json # packages/babel-plugin-transform-async-to-module-method/package.json # packages/babel-plugin-transform-class-constructor-call/package.json # packages/babel-plugin-transform-class-properties/package.json # packages/babel-plugin-transform-decorators/package.json # packages/babel-plugin-transform-es2015-block-scoping/package.json # packages/babel-plugin-transform-es2015-classes/package.json # packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/expected.js # packages/babel-plugin-transform-es2015-computed-properties/package.json # packages/babel-plugin-transform-es2015-duplicate-keys/package.json # packages/babel-plugin-transform-es2015-function-name/package.json # packages/babel-plugin-transform-es2015-modules-amd/package.json # packages/babel-plugin-transform-es2015-modules-commonjs/package.json # packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js # packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/export-destructured/expected.js # packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-default-params/expected.js # packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object-rest/expected.js # packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/export-const-destructuring-object/expected.js # packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/strict/options.json # packages/babel-plugin-transform-es2015-modules-systemjs/package.json # packages/babel-plugin-transform-es2015-modules-umd/package.json # packages/babel-plugin-transform-es2015-object-super/package.json # packages/babel-plugin-transform-es2015-parameters/package.json # packages/babel-plugin-transform-es2015-shorthand-properties/package.json # packages/babel-plugin-transform-es2015-sticky-regex/package.json # packages/babel-plugin-transform-es2015-unicode-regex/package.json # packages/babel-plugin-transform-es5-property-mutators/package.json # packages/babel-plugin-transform-exponentiation-operator/package.json # packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/opaque-type-alias/expected.js # packages/babel-plugin-transform-object-rest-spread/package.json # packages/babel-plugin-transform-object-rest-spread/src/index.js # packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/nested-2/expected.js # packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/nested/expected.js # packages/babel-plugin-transform-proto-to-assign/package.json # packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export-default/expected.js # packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/regression-node-type-export/expected.js # packages/babel-plugin-transform-react-display-name/package.json # packages/babel-plugin-transform-react-display-name/src/index.js # packages/babel-plugin-transform-react-display-name/test/fixtures/display-name/assignment-expression/expected.js # packages/babel-plugin-transform-react-display-name/test/fixtures/display-name/nested/expected.js # packages/babel-plugin-transform-react-display-name/test/fixtures/display-name/object-property/expected.js # packages/babel-plugin-transform-react-display-name/test/fixtures/display-name/variable-declarator/expected.js # packages/babel-plugin-transform-react-jsx-compat/package.json # packages/babel-plugin-transform-react-jsx/package.json # packages/babel-plugin-transform-regenerator/package.json # packages/babel-plugin-transform-regenerator/test/fixtures/regression/6733/expected.js # packages/babel-plugin-transform-regenerator/test/fixtures/regression/T7041/expected.js # packages/babel-plugin-transform-regenerator/test/fixtures/variable-renaming/retain-lines/expected.js # packages/babel-plugin-transform-runtime/README.md # packages/babel-plugin-transform-runtime/test/fixtures/runtime/custom-runtime/expected.js # packages/babel-plugin-transform-runtime/test/fixtures/runtime/full/expected.js # packages/babel-plugin-transform-runtime/test/fixtures/runtime/regenerator-runtime/expected.js # packages/babel-plugin-transform-strict-mode/package.json # packages/babel-polyfill/package.json # packages/babel-preset-es2015/package.json # packages/babel-preset-es2016/package.json # packages/babel-preset-es2017/package.json # packages/babel-preset-latest/package.json # packages/babel-preset-react/package.json # packages/babel-preset-stage-0/package.json # packages/babel-preset-stage-1/package.json # packages/babel-preset-stage-2/package.json # packages/babel-preset-stage-3/package.json # packages/babel-register/README.md # packages/babel-register/package.json # packages/babel-runtime/package.json # packages/babel-template/package.json # packages/babel-traverse/package.json # packages/babel-traverse/src/scope/lib/renamer.js # packages/babel-traverse/test/evaluation.js # packages/babel-traverse/test/replacement.js # packages/babel-types/README.md # packages/babel-types/package.json # packages/babel-types/src/converters.js # packages/babel-types/src/definitions/core.js # packages/babel-types/src/definitions/es2015.js # packages/babel-types/src/definitions/flow.js # packages/babel-types/test/converters.js # packages/babel-types/test/validators.js # scripts/generate-interfaces.js # yarn.lock
babel-plugin-transform-function-bind
Compile the new function bind operator
::to ES5.
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-transform-function-bind
Usage
Via .babelrc (Recommended)
.babelrc
{
"plugins": ["transform-function-bind"]
}
Via CLI
babel --plugins transform-function-bind script.js
Via Node API
require("babel-core").transform("code", {
plugins: ["transform-function-bind"]
});