Callable class constructor transform

Class constructor call is a deprecated feature

The class constructor call proposal has been withdrawn (Withdrawn Proposals) and it will be removed in Babel 7.

This plugin allows Babel to transform class constructors.

It basically allows to use the new.target feature on ES2015 classes:

class Point {

  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  call constructor(x, y) {
    return new Point(x, y);
  }

}

let p1 = new Point(1, 2); // OK
let p2 = Point(3, 4); // OK

Try in REPL

Example

Date example

The javascript Date works this way:

// You can get a Date instance using the new keyword
let now = new Date();
console.log(now.getMonth()); // Prints '3'
console.log(now.toString()); // Prints 'Mon Apr 11 2016 13:26:07 GMT+0100 (BST)'

// You can get a string of the current date using Date as a function:
let nowStr = Date();
console.log(nowStr); // Prints 'Mon Apr 11 2016 13:26:07 GMT+0100 (BST)'

It is currently possible to implement something like that using new.target (see example in proposal) and this new feature makes it available for ES2015 classes.

A date implementation could be:

class Date {
  constructor() {
    // ...
  }

  call constructor() {
    let date = new Date();
    return date.toString();
  }
}

let now = new Date(); // Get a Date instance
let nowStr = Date(); // Use the 'call constructor()' part to get a string value of the current date

Try in REPL

Installation

npm install --save-dev babel-plugin-transform-class-constructor-call

Usage

.babelrc

{
  "plugins": ["transform-class-constructor-call"]
}

Via CLI

babel --plugins transform-class-constructor-call script.js

Via Node API

require("babel-core").transform("code", {
  plugins: ["transform-class-constructor-call"]
});

References