javascript - 有什么方法可以通过属性访问函数的返回值吗?

标签 javascript functional-programming language-features function-prototypes

我是一名 JS 开发人员,正在尝试函数式编程思想,我想知道是否可以按照 Promise 链的编写方式使用链来实现同步函数。

例如:

function square (num) {
  return num * num;
}
let foo = 2 
let a = square(foo) //=> 4
let b = square(square(foo)) //=> 16

很公平,但我想做的(通常是为了使代码解析更容易)是通过将其作为链的第一个参数传递来将这些方法链接在一起。这样这样的事情就可以工作:

let c = square(foo)
          .square()
          .square() //=> 256

有没有办法用普通的 javascript 来做到这一点,或者这是我必须修改 Function.prototype 才能做到的事情?

最佳答案

您可能对 Identity 仿函数感兴趣 - 它允许您提升任何函数来对 Identity 的值进行操作 - 例如下面的 squaremult。您无需接触原生原型(prototype)即可获得可链接的界面 ^_^

const Identity = x => ({
  runIdentity: x,
  map: f => Identity(f(x))
})

const square = x => x * x

const mult = x => y => x * y

let result = Identity(2)
  .map(square)
  .map(square)
  .map(square)
  .map(mult(1000))
  .runIdentity
  
console.log(result)
// 256000

关于javascript - 有什么方法可以通过属性访问函数的返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44105026/

相关文章:

javascript - Guard 不在 nestJs 中执行 passport 策略

scala - 如何在抽象效果类型上配置猫计时器

javascript - 你如何使用 lodash 链接函数?

javascript - 在 Cannon.js 中禁用 body 碰撞

scala - 实现scala中function的实现

c++ - 在 C++ 中没有静态构造函数的理由是什么?

python - Smalltalk(例如 Pharo)与 Python 相比如何?

c# - 有没有办法使 C# 绑定(bind)静态工作?

javascript - Mixitup jQuery 插件在选择过滤器后重置

Java8 实例化谓词