Babel和子类的EventTarget

问题描述 投票:2回答:2

我为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插件?

webpack babel dom-events babel-loader
2个回答
0
投票

通过向我的项目添加npm模块event-target-shim找到我自己的问题的解决方案,并通过添加以下导入更改了类:

import { EventTarget } from 'event-target-shim';

export default class MyClass extends EventTarget {
  /* same as above */
}

0
投票

我想也许问题是你没有从你自己的类中的'events'导入EventTarget。

所以你需要像这样的导入事件:

import EventTarget from 'events';

export default class MyClass extends EventTarget {
  constructor(gl) {
    super();
    // more code here
  }
}

我的代码和谷歌搜索有同样的问题我到这篇文章。问题是在浏览器上(没有babel),你不需要进行导入,但是当我运行我的jest测试它崩溃因为我使用babel所以做导入会做的伎俩;),无需安装npm模块

© www.soinside.com 2019 - 2024. All rights reserved.