141 lines
2.5 KiB
Markdown
141 lines
2.5 KiB
Markdown
# Playground
|
|
|
|
Playground is a proving ground for **possible** ES7 proposals.
|
|
|
|
**NOTE: These features are in no way endorsed by Ecma International and are not a part of ES6. They might become a part of ECMAScript in the future.**
|
|
|
|
## Usage
|
|
|
|
$ 6to5 --playground
|
|
|
|
```javascript
|
|
to5.transform("code", { playground: true });
|
|
```
|
|
|
|
**NOTE:** Enabling `playground` also enables [experimental support](experimental.md).
|
|
|
|
## Features
|
|
|
|
* [Memoization operator](#memoization-operator)
|
|
* [Method binding](#method-binding)
|
|
* [Method binding function shorthand](#method-binding-function-shorthand)
|
|
* [Object getter memoization](#object-getter-memoization)
|
|
* [This shorthand](#this-shorthand)
|
|
|
|
### Memoization assignment operator
|
|
|
|
The memoization assignment operator allows you to lazily set an object property.
|
|
It checks whether there's a property defined on the object and if there isn't then
|
|
the right hand value is set.
|
|
|
|
This means that `obj.x` in the following `var x = { x: undefined }; obj.x ?= 2;`
|
|
will still be `undefined` because it's already been defined on the object.
|
|
|
|
```javascript
|
|
var obj = {};
|
|
obj.x ?= 2;
|
|
obj.x; // 2
|
|
|
|
obj = { x: 1 };
|
|
obj.x ?= 2;
|
|
obj.x; // 1
|
|
|
|
obj = { x: undefined }
|
|
obj.x ?= 2;
|
|
obj.x; // undefined
|
|
```
|
|
|
|
```javascript
|
|
var obj = {};
|
|
obj.x ?= 2;
|
|
```
|
|
|
|
equivalent to
|
|
|
|
```javascript
|
|
var obj = {};
|
|
if (!Object.prototype.hasOwnProperty.call(obj, "x")) obj.x = 2;
|
|
```
|
|
|
|
### Method binding
|
|
|
|
```javascript
|
|
var fn = obj#method;
|
|
var fn = obj#method("foob");
|
|
```
|
|
|
|
equivalent to
|
|
|
|
```javascript
|
|
var fn = obj.method.bind(obj);
|
|
var fn = obj.method.bind(obj, "foob");
|
|
```
|
|
|
|
### Method binding function shorthand
|
|
|
|
```javascript
|
|
["foo", "bar"].map(#toUpperCase); // ["FOO", "BAR"]
|
|
[1.1234, 23.53245, 3].map(#toFixed(2)); // ["1.12", "23.53", "3.00"]
|
|
```
|
|
|
|
equivalent to
|
|
|
|
```javascript
|
|
["foo", "bar"].map(function (val) { return val.toUpperCase(); });
|
|
[1.1234, 23.53245, 3].map(function (val) { return val.toFixed(2); });
|
|
```
|
|
|
|
### Object getter memoization
|
|
|
|
```javascript
|
|
var foo = {
|
|
memo bar() {
|
|
return complex();
|
|
}
|
|
};
|
|
|
|
class Foo {
|
|
memo bar() {
|
|
return complex();
|
|
}
|
|
}
|
|
```
|
|
|
|
equivalent to
|
|
|
|
```javascript
|
|
var foo = {
|
|
get bar() {
|
|
return Object.defineProperty(this, "bar", {
|
|
value: complex(),
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true
|
|
}).bar;
|
|
}
|
|
};
|
|
|
|
class Foo {
|
|
get bar() {
|
|
return Object.defineProperty(this, "bar", {
|
|
value: complex(),
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true
|
|
}).bar;
|
|
}
|
|
}
|
|
```
|
|
|
|
### This shorthand
|
|
|
|
```javascript
|
|
@foo
|
|
```
|
|
|
|
equivalent to
|
|
|
|
```javascirpt
|
|
this.foo
|
|
```
|