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/

Written on December 12, 2018