babel 7.2
今天看邮件看到 Babel 7.2 发布了,主要新增了两个功能。
Private Instance Methods
ES6 给JavaScript带来了 class,不同于其他语言,JavaScript 中的 class 属性和方法是没有 private / public 之分的。 TypeScript给JavaScript class 带来了 public private protected 关键字。不过TypeScript在运行时就消失了,能力有限。 tc39 计划给 JavaScript 增加私有方法和属性的功能,不同于Java这类语言。tc39采用了类似Ruby @开头的方式,增加了 #开头。 以#开头的方法或属性将成为私有。 https://github.com/tc39/proposal-private-methods
```ecmascript 6 class Person { #age = 19; #increaseAge() { this.#age++; } birthday() { this.#increaseAge(); alert(“Happy Birthday!”); } }
该提议目前在 stage-3 ,未来很有可能成为标准。
## "Smart" Pipeline Operator Parsing
这是一个还在 stage-0 的提议,看起来很炫酷。
```typescript
fetch('/music/pk/altes-kamuffel')
.then(res => res.blob())
.then(playBlob);
```ecmascript 6 ‘/music/pk/altes-kamuffel’ |> await fetch(#) |> await #.blob() |> playBlob;
可以改写为
\# 作为上一行的返回值,传递给下一行管道,直到输出。
网站上有一个更变态的例子
```typescript
console.log(
await stream.write(
new User.Message(
capitalize(
doubledSay(
await promise
|| throw new TypeError(
`Invalid value from ${promise}`)
), ', '
) + '!'
)
)
);
改写为
```ecmascript 6
promise
|> await #
|> # || throw new TypeError(
Invalid value from ${promise}
)
|> doubleSay(#, ‘, ‘)
|> capitalize
|> # + ‘!’
|> new User.Message(#)
|> await stream.write(#)
|> console.log;
```
我个人认为,函数式编程爱好者会喜欢这个提议,但这种写法在可读性上比较差
相关文档
https://babeljs.io/blog/2018/12/03/7.2.0 https://www.typescriptlang.org/docs/handbook/classes.html http://es6.ruanyifeng.com/#docs/class https://github.com/js-choi/proposal-smart-pipelines/