3

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

4

2 回答 2

1

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

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

export default class MyClass extends EventTarget {
  /* same as above */
}
于 2018-02-27T16:42:23.993 回答
0

我认为问题可能在于您没有从自己班级的“事件”中导入 EventTarget。

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

import EventTarget from 'events';

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

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

于 2019-03-25T19:05:55.087 回答