Socket
Socket
Sign inDemoInstall

babel-plugin-transform-function-bind

Package Overview
Dependencies
4
Maintainers
6
Versions
31
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    babel-plugin-transform-function-bind

Compile function bind operator to ES5


Version published
Weekly downloads
245K
decreased by-26.34%
Maintainers
6
Install size
2.24 MB
Created
Weekly downloads
 

Readme

Source

babel-plugin-transform-function-bind

Compile the new function bind operator :: to ES5.

Detail

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

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

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

Try in REPL

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'

Try in REPL

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);

Try in REPL

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

.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"]
});

References

Keywords

FAQs

Last updated on 20 Jan 2017

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc