一尘不染

Javascript ES6 TypeError:如果没有“ new”,则无法调用类构造函数Client

node.js

我有一门用Javascript ES6编写的类。当我尝试执行nodemon命令时,我总是会看到此错误TypeError: Classconstructor Client cannot be invoked without 'new'

完整错误如下所述:

/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:45
        return (0, _possibleConstructorReturn3.default)(this, (FBClient.__proto__ || (0, _getPrototypeOf2.default)(FBClient)).call(this, props));
                                                                                                                              ^

TypeError: Class constructor Client cannot be invoked without 'new'
    at new FBClient (/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:45:127)
    at Object.<anonymous> (/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:195:14)
    at Module._compile (module.js:641:30)
    at Object.Module._extensions..js (module.js:652:10)
    at Module.load (module.js:560:32)
    at tryModuleLoad (module.js:503:12)
    at Function.Module._load (module.js:495:3)
    at Module.require (module.js:585:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/akshaysood/Blockchain/fabricSDK/dist/routes/users.js:11:20)

我想做的是,我创建了一个类,然后创建了该类的实例。然后,我试图导出该变量。

类结构定义如下:

class FBClient extends FabricClient{

    constructor(props){
        super(props);
    }

<<< FUNCTIONS >>>

}

我如何尝试导出变量->

var client = new FBClient();
client.loadFromConfig(config);

export default client = client;

您可以在此处找到完整的代码>
https://hastebin.com/kecacenita.js
Babel生成的代码>
https://hastebin.com/fabewecumo.js


阅读 398

收藏
2020-07-07

共1个答案

一尘不染

问题在于该类扩展了本机ES6类,并通过Babel转换为ES5。转译的类至少在没有其他措施的情况下不能扩展本机类。

class TranspiledFoo extends NativeBar {
  constructor() {
    super();
  }
}

导致类似

function TranspiledFoo() {
  var _this = NativeBar.call(this) || this;
  return _this;
}
// prototypically inherit from NativeBar

由于ES6类应该只调用newNativeBar.call在错误的结果。

ES6类在任何最新的Node版本中均受支持,不应进行编译。es2015应该从Babel配置中排除,最好使用env预设设置为nodetarget

2020-07-07