Babel error: Class constructor Foo cannot be invoked without 'new'

匿名 (未验证) 提交于 2019-12-03 02:26:02

问题:

I am using babel to transpile.

I have class BaseComponent which is extended by class Logger.

When I run new Logger() in the browser, I am getting this error

Class constructor BaseComponent cannot be invoked without 'new'

the code that throws this is:

var Logger = function (_BaseComponent) {   _inherits(Logger, _BaseComponent);    function Logger() {     _classCallCheck(this, Logger);      return _possibleConstructorReturn(this, Object.getPrototypeOf(Logger).call(this, "n")); //throws here   } 

回答1:

Due to the way ES6 classes work, you cannot extend a native class with a transpiled class. If your platform supports native classes, my recommendation would be, instead of using the preset es2015, use es2015-node5, assuming you're on Node 5. That will cause Babel to skip compiling of classes so that your code uses native classes, and native classes can extend other native classes.



回答2:

Another solution is exclude transform-es2015-classes in .babelrc

presets: [    ["env", { exclude: ["transform-es2015-classes"] }] ] 

UPDATE: In the latest version of "env" preset plugin names have changed (e.g. it's now "transform-classes"). Use the "debug" option to inspect which plugins are included.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!