Babel 'protoToAssign' 转换器和 ES6 class 继承

Babel 'protoToAssign' transformer and ES6 class inheritance

这里是 simple plunker example 涉及 class 继承,垫片和 Babel 选项设置为 stage: 0, loose: 'all':

class Hello {
  static address = ', world!';
  greeting = 'Hello';

  constructor() {
    this.greet();
  }

  greet() {
    document.write(this.greeting + Hello.address);
  }
}

class Hi extends Hello {
  greeting = 'Hi';

  constructor() {
    super();
  }
}

new Hi().greet();

显然,它在 IE5.5+ 中正常工作。

在什么情况下,Babel spec.protoToAssign 转换器对于 ES6/ES7 针对旧版浏览器的转译 OOP 代码可能是有益的(或不受欢迎的)?

ES6class继承也意味着

Hi.address

会起作用,因为 Hi 继承自 Hello。如果没有 protoToAssign,这将无法在 IE<=10.

中运行

不过,一般情况与该页面上的描述完全相同。 IE<=10 不支持赋值 __proto__ 所以如果你依赖依赖它的行为,它将不起作用。

Babel 的 caveats 页面涵盖了所有内容。