使用Babel扩展MediaSource - 如何正确调用super()?

时间:2017-09-15 23:19:44

标签: javascript ecmascript-6 babeljs es6-class

我想扩展MediaSource。我正在使用巴贝尔。

class BradMediaSource extends MediaSource {
  constructor() {
    super();
  }
}

const source = new BradMediaSource();

直接在Chrome中,这很好用。在用Babel完成的转换构建中,我收到以下错误:

  

未捕获TypeError:无法构造'MediaSource':请使用'new'运算符,此DOM对象构造函数不能作为函数调用。

这似乎与此GitHub问题相似:https://github.com/babel/babel/issues/1966我也尝试了以下方法,但它似乎并不适用于我的具体情况......没有区别:https://www.npmjs.com/package/babel-plugin-transform-custom-element-classes

我的.babelrc

{ "presets": [ "es2015" ] }

有解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:1)

通常,扩展的内置类型不适用于Babel的编译类,因此您需要将Babel配置为不处理类,并将应用程序限制为仅支持类的浏览器。

假设您的目标浏览器都支持ES6类语法,最简单的方法是使用为这些目标环境配置的babel-preset-env

你也可以尝试在你的Babel配置MediaSource中使用transform-builtin-extend,但这确实会随着可以扩展的内容而变化。