不使用 @ 语法装饰 ES6 class 方法?

Decorate ES6 class method without using @ syntax?

通常你使用语法修饰一个函数:

@decorate
function x() {
  console.log('wow am I decorated')
}

但是流尚不支持此语法。一个简单的解决方法是你可以做

const x = decorate(function() {
  console.log('wow am I decorated')
})

但是我怎样才能在 class 中获得相同的结果?

class plsWork {
  how2decorate() {
    console.log('why can I not be decorated :sob:')
  }
}

这取决于。由于您不遵守当前标准,您可以使用 class 属性:

class plsWork {
  how2decorate = decorate(function() {
    console.log('why can I not be decorated :sob:')
  })
}

另一种方法是在构造函数中添加方法,这是转译器对第一个解决方案所做的:

class plsWork {
  constructor() {
    this.how2decorate = decorate(() => {
      console.log('why can I not be decorated :sob:')
    });
  }
}

没有必要做任何花哨的事情。通过 .flowconfig 选项 esproposal.decorators=ignore 支持方法装饰器。

对 class 装饰器的支持刚刚 pulled in today,应该会在下一个版本中实现。