我为WebGL程序提供了以下导出的JS类:
export default class MyClass extends EventTarget {
constructor(gl) {
super();
// more code here
}
}
Babel(babel-preset-es2015
)在webpack JS包中生成以下代码:
var MyClass = function(_EventTarget) {
_inherits(MyClass, _EventTarget);
function MyClass(gl) {
_classCallCheck(this, MyClass);
var _this = _possibleConstructorReturn(this,
(MyClass.__proto__ ||
Object.getPrototypeOf(MyClass)).call(this)); // ***
// more code here
}
};
在运行时,我从上面用.call(this)
标记的***
调用中得到以下错误。
TypeError: Failed to construct 'EventTarget': Please use the 'new' operator, this DOM object constructor cannot be called as a function.
我最初认为这是一个与Webpack相关的问题,但经过更多的研究,我现在认为这个错误与Babel如何转换我的代码有关。
我应该在babel-preset-es2015
中启用哪些选项,还是应该使用不同的babel插件?
通过向我的项目添加npm模块event-target-shim
找到我自己的问题的解决方案,并通过添加以下导入更改了类:
import { EventTarget } from 'event-target-shim';
export default class MyClass extends EventTarget {
/* same as above */
}
我想也许问题是你没有从你自己的类中的'events'导入EventTarget。
所以你需要像这样的导入事件:
import EventTarget from 'events';
export default class MyClass extends EventTarget {
constructor(gl) {
super();
// more code here
}
}
我的代码和谷歌搜索有同样的问题我到这篇文章。问题是在浏览器上(没有babel),你不需要进行导入,但是当我运行我的jest测试它崩溃因为我使用babel所以做导入会做的伎俩;),无需安装npm模块