了解一下ECMA标准提案的几个阶段(stage-x)

stage-x 处于某个阶段,描述的是ECMA标准相关的内容。根据天提案划分界限,stage-x大致分为以下阶段:

  • stage-0:还是一个设想,只能由TC39成员或TC39贡献者提出,什么样的设想呢?比如怎么一年后我称为世界首富,我应该怎么做才能称为世界首富呢?

  • stage-1::提案阶段,比较正式的提议,只能由TC39成员发起,这个提案要解决的问题必须有正式的书面描述。比如,我设想称为世界首富,建议认 “比尔.盖茨” 和 “亚马逊CEO” 两个为亲爹。并且继承它们两个的遗产,我就可以成为世界首富了。

  • stage-2:草案,有了初始规范,必须对功能语法和语义进行正式描述,包括一些实验性的实现。继续首富之梦,认爹也不能白认吧,起码有点诚意给每一个爹磕三个响头就稳了。可以提前计划一下首富后的快乐生活。

  • stage-3:候选,该提议基本已经实现,需要等待实验验证,用户反馈及验收测试通过。 基本上已经稳了,就等着继承遗产就ok了。

  • stage-4:已完成,必须通过 Test262 验收测试,下一步就纳入ECMA标准。 首富开始交接仪式,成功上位,等待下次福布斯排行榜统计后,你就上榜了!

如果想要提前使用一些较为新鲜的ECMA语法(未到stage-4)阶段的语法,如ES6类的扩展:

  1. 实例属性初始化
  2. 静态类属性
  3. 函数绑定到类实例
  4. 类上定义静态函数
class Bork {
    //Property initializer syntax
    instanceProperty = "bork";
    boundFunction = () => {
      return this.instanceProperty;
    };

    //Static class properties
    static staticProperty = "babelIsCool";
    static staticFunction = function() {
      return Bork.staticProperty;
    };
  }

  let myBork = new Bork;

  //Property initializers are not on the prototype.
  console.log(myBork.__proto__.boundFunction); // > undefined

  //Bound functions are bound to the class instance.
  console.log(myBork.boundFunction.call(undefined)); // > "bork"

  //Static function exists on the class.
  console.log(Bork.staticFunction()); // > "babelIsCool"

可以借助 babel 的一些插件在构建编译阶段转换成浏览器可运行的代码。插件是 @babel/plugin-proposal-class-properties。这样配置:

{
  "plugins": ["@babel/plugin-proposal-class-properties"]
}

这在开发React场景下使用偏多,也可以使用React脚手架工具这样这些语法都包括在内。

posted @ 2020-03-01 00:49  qiqf  阅读(569)  评论(0编辑  收藏  举报