2017-09-15 107 views
0

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

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

const source = new BradMediaSource(); 

在Chrome直接,这工作正常。在与巴贝尔做了transpiled构建,我得到以下错误:

Uncaught TypeError: Failed to construct 'MediaSource': Please use the 'new' operator, this DOM object constructor cannot be called as a function.

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

.babelrc

{ "presets": [ "es2015" ] } 

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

+0

可能的重复[在ES6中使用Babel扩展内置原生](https://stackoverflow.com/questions/33832646/extending-built-in-natives-in-es6-with-babel) – estus

回答

1

一般来说,扩展内建类型不适用于Babel的编译类,因此您需要配置Babel以不处理类,并将应用程序仅限于支持类的浏览器。

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

你也可以尝试在你的Babel配置文件MediaSource中使用transform-builtin-extend,虽然这样会随着确切的事情而变化。

+0

不应该这是由你在这里建议的插件处理? https://stackoverflow.com/questions/33832646/extending-built-in-natives-in-es6-with-babel/39376819#39376819 – estus

+0

可能。编辑。 – loganfsmyth