如何在Ramda中访问构造函数'this'?

Kad*_*BOT 2 javascript ecmascript-6 ramda.js

每当我尝试访问任何this内部的Ramda Compose函数(R.compose)时,我得到undefined,也许是因为this"绑定"到Ramda Compose函数.

如何this访问Class构造函数中启动的内容?

this.stategetContent在下面的代码中未定义:

export default class FaqStore {
  constructor() {
    this.state = new FaqState()

    this.getParents()
  }

  getContent = R.concat(this.state.parents, R.prop('content'))
  getParents = FaqService.getParents().then(this.getContent)
Run Code Online (Sandbox Code Playgroud)

Sco*_*yet 5

Felix Kling的答案非常好.不过,我想从Ramda中添加一些更多的上下文.

Ramda(免责声明:我是其中一位作者)是关于函数式编程的.它尝试做两件事:使Javascript开发人员更容易转向更标准的FP实践,并使FP语言的用户更容易使用Javascript.完全没有强调与面向对象的编码风格的互操作.

有一次,Ramda确实尝试确保其某些功能确实维护了this上下文,从而可以将它们用作OOP方法.但我们完全放弃了这个焦点; 它一直是投机的,没有任何要求,当我们不小心打破它的某些功能时,我们根本就没有任何抱怨.似乎没有什么理由.同时,它使我们的实施变得复杂并且伤害了性能.因此,当我们发现需要重写函数时,我们不再尝试确保维护它.

这是有道理的.有些人认为Ramda是Underscore或lodash的替代品,但这似乎总是向我们倾斜.这些库引入了一些FP概念,但它们被设计为在多范式环境中工作,同样满足于命令式,OOP或FP代码库.Ramda与众不同,旨在仅在功能系统中运行良好.它完全围绕构建系统的概念构建,通过组合纯函数.

出于这些原因,除了Felix所说的一切之外,没有理由期望Ramda函数能够保持你的this上下文.