假设我有一个简单的id函数:
let id = a => a现在我想让它成为一个OO风格的方法,而不需要重新定义它,即
let a = {foo:5}
a.id() // {foo:5}如何将第一个函数转换为第二个函数?有什么黑客可以这么做吗?我试过使用bind,但它似乎不起作用。
发布于 2017-05-13 11:48:21
要将普通函数id转换为隐式依赖于接收器(由this引用)的函数,您需要为原型分配一个辅助函数:
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在这个例子中的作用只是一个巧合。
发布于 2017-05-12 16:04:18
你可以用bind来做
let id = a => a;
// ...
let a = {foo:5};
a.id = id.bind(null, a);
a.id(); // {foo:5}不过,从技术上讲,bind返回一个新函数。
我认为你排除了这一点,但当然,交替地,只需定义另一个箭头:
a.id = _ => id(a);或者一个非箭头
a.id = function() { return id(this); };...although说,这取决于它的名称。
https://stackoverflow.com/questions/43942008
复制相似问题