Javascript ES6类和节点内的函数用法

Javascript ES6类和节点内的函数用法,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我一直在学习一些React,我一直在使用ES6类编写基于类的组件。我正在做一个小的节点项目,但这些语法都不起作用 class Handler { handleReq = () => { this.ctx = ctx; }; testFunc = async () => { }; } export default (HandleReq = Handler.prototype.handleReq); 这个语法有什么问题?它不在节点中运行吗?我必须安装esm

我一直在学习一些React,我一直在使用ES6类编写基于类的组件。我正在做一个小的节点项目,但这些语法都不起作用

class Handler {
  handleReq = () => {
    this.ctx = ctx;
  };

  testFunc = async () => {

  };
}

export default (HandleReq = Handler.prototype.handleReq);
这个语法有什么问题?它不在节点中运行吗?我必须安装
esm
,以使导入/导出语法正常工作,但这仍然无法编译

仍处于提案阶段(第3阶段已经开始,所以它们很快就会成为语言的一部分)。这意味着一些运行时可能已经支持它们了,但是它们还不必支持。要可靠地使用今天的提案,您必须将其向下传输

将代码传输到以下ES6:

 class Handler {
  constructor() {
    this.handleReq = () => {
      this.ctx = ctx;
    };

    this.testFunc = async () => {
    };
   }
 }

因此,这些方法实际上只存在于构造后的实例上,而不存在于
处理程序上。prototype

正如其他人所指出的,类字段还不是ES6语法的一部分,不需要转换。如果要避免生成步骤,等效的节点语法为:

// import someImport from './some-import' is invalid, instead use:
const someImport = require('./some-import');

class Handler {
  constructor() {
    this.handleReq = this.handleReq.bind(this);
    this.testFunc = this.testFunc.bind(this);
  }

  handleReq() {
    this.ctx = ctx; // Where is ctx coming from?
  }

  async testFunc() {

  }
}

// export default Handler.prototype.handleReq is invalid, instead use:
module.exports = Handler.prototype.handleReq;

类属性尚未生效,它们处于建议阶段。你今天必须使用一个transpiler lile BabelJS来和他们一起工作。明白了,现在人们通常做什么来获得这种东西?他们是否编写旧样式的代码?以及
Handler.prototype.handleReq
将永远无法工作,因为
handleReq
必须绑定到实例,因此它将只存在于实例上(
(新处理程序).handleReq
)@johnlipson是,它们只是使用普通的
方法,或者将箭头函数放在它们所属的构造函数中。您似乎没有发布完整的代码,但我怀疑您是否需要这里的箭头函数应该完成什么?除了在赋值未声明的全局变量时抛出异常之外,如果您只导出一个方法,为什么还要使用