假设我有这个简单的 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/