javascript - 如何访问 Ramda 中的构造函数 'this'?

标签 javascript ecmascript-6 ramda.js

每当我尝试访问 Ramda Compose 函数 (R.compose) 中的任何 this 时,我都会得到 undefined,可能是因为 this 与 Ramda Compose 函数“绑定(bind)”。

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

this.state 在下面的代码中的 getContent 中是未定义的:

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)

最佳答案

Felix Kling 的回答非常好。不过,我想添加更多来自 Ramda 的上下文。

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

在某一时刻,Ramda 确实尝试确保它的某些函数确实维护了 this 上下文,这将允许它们被用作 OOP 方法。但是我们完全放弃了这个重点;它一直是推测性的,根本没有任何要求,当我们不小心将它用于某些功能时,我们也没有任何提示。似乎没有什么理由这样做。同时,它使我们的实现变得复杂并损害了性能。因此,当我们发现需要重写函数时,我们不再试图确保维护它。

这是有道理的。有些人将 Ramda 视为 Underscore 或 lodash 的替代品,但在我们看来,这似乎总是有偏差。这些库引入了一些 FP 概念,但它们设计用于在多范式环境中工作,同样适用于命令式、OOP 或 FP 代码库。 Ramda 不同,它被设计成只在函数式系统中运行良好。它完全围绕通过组合纯函数构建系统的概念构建。

由于这些原因,除了 Felix 所说的一切之外,没有真正的理由期望 Ramda 函数会维护您的 this 上下文。

关于javascript - 如何访问 Ramda 中的构造函数 'this'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41046519/

相关文章:

javascript - 将函数列表应用于 Javascript 中的可能值

javascript - 如何在 JavaScript 中使用 pointfree 风格而不失可读性?

javascript - JavaScript 重定向后后退按钮不起作用

javascript - 反转 Object.entries 转换

Typescript 错误作为警告

javascript - 在Rails中使用ES6语法和Javascript压缩的直接,受支持的稳定方法是什么?

Javascript - 为什么 Ramda over 函数在这里不起作用?

javascript - 对于 CodeMash 2012 的 'Wat' 演讲中提到的这些奇怪的 JavaScript 行为有何解释?

javascript - 通过递归进入输入的反向数字

javascript - 获取 React 元素 offsetTop