UNPKG

1.78 kBMarkdownView Raw
1# babel-plugin-transform-es2015-classes
2
3> Compile ES2015 classes to ES5
4
5## Caveats
6
7Built-in classes such as `Date`, `Array`, `DOM` etc cannot be properly subclassed
8due to limitations in ES5 (for the [es2015-classes](http://babeljs.io/docs/plugins/transform-es2015-classes) plugin).
9You can try to use [babel-plugin-transform-builtin-extend](https://github.com/loganfsmyth/babel-plugin-transform-builtin-extend) based on `Object.setPrototypeOf` and `Reflect.construct`, but it also has some limitations.
10
11## Installation
12
13```sh
14npm install --save-dev babel-plugin-transform-es2015-classes
15```
16
17## Usage
18
19### Via `.babelrc` (Recommended)
20
21**.babelrc**
22
23```js
24// without options
25{
26 "plugins": ["transform-es2015-classes"]
27}
28
29// with options
30{
31 "plugins": [
32 ["transform-es2015-classes", {
33 "loose": true
34 }]
35 ]
36}
37```
38
39### Via CLI
40
41```sh
42babel --plugins transform-es2015-classes script.js
43```
44
45### Via Node API
46
47```javascript
48require("babel-core").transform("code", {
49 plugins: ["transform-es2015-classes"]
50});
51```
52
53## Options
54
55### `loose`
56
57`boolean`, defaults to `false`.
58
59#### Method enumerability
60
61Please note that in loose mode class methods **are** enumerable. This is not in line
62with the spec and you may run into issues.
63
64#### Method assignment
65
66Under loose mode, methods are defined on the class prototype with simple assignments
67instead of being defined. This can result in the following not working:
68
69```javascript
70class Foo {
71 set bar() {
72 throw new Error("foo!");
73 }
74}
75
76class Bar extends Foo {
77 bar() {
78 // will throw an error when this method is defined
79 }
80}
81```
82
83When `Bar.prototype.foo` is defined it triggers the setter on `Foo`. This is a
84case that is very unlikely to appear in production code however it's something
85to keep in mind.