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
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
Installation
npm install --save-dev babel-plugin-transform-class-constructor-call
Usage
Via .babelrc
(Recommended)
.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
- Inactive Proposals
- Proposal: Call Constructor
- Blog post: ECMAScript proposal: function-callable classes
© 2018 Sebastian McKenzie
Licensed under the MIT License.
http://babeljs.io/docs/plugins/transform-class-constructor-call/