javascript - 在 Javascript 中制作函数式 OO 函数

标签 javascript functional-programming

假设我有这个简单的 id 函数:

let id = a => a

现在我想让它成为 OO 风格的方法,而不重新定义它,即

let a = {foo:5}
a.id()  // {foo:5}

如何将第一个函数变成第二个函数?有一些黑客可以做到这一点吗?我尝试使用 bind,但它似乎不起作用。

最佳答案

要将普通函数 id 转换为隐式依赖于接收者的函数(由 this 引用),您需要为原型(prototype)分配一个辅助函数:

class Cons {
  constructor(x) { this.foo = x }
  asMethod(f) { return (...args) => f(this, ...args) }
}

const o = new Cons(5);
const id = x => x;

console.log(
  o.asMethod(id) ()
);

但这没有多大意义!您的函数必须将接收者作为其第一个参数,因此非常具体,这与通用相反。 id 在示例中起作用只是一个巧合。

关于javascript - 在 Javascript 中制作函数式 OO 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43942008/

相关文章:

javascript - 取消 promise 链?

javascript - JavaScript 输出中奇怪的不可选择字符

variables - 如何在 Elixir 中更新函数内的 bool 变量

java - 在 Java 中使用可选和 lambda

java - 将两个 CompletableFutures 链接在一起,每个 CompletableFutures 返回列表

f# - 如何在 F# 中实现 "return early"逻辑

javascript - 我的汉堡包下拉菜单出现在移动设备上 'How it works' 页面的 slider 后面,分页与文本混淆

javascript - 为什么 1++ "1"=== 2; +"1"++ "1"=== 2 和 "1"+ "1"=== "11"在 javascript 中

javascript - 设置 CSS 媒体类型内联

functional-programming - 无积分编程拼图