首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Javascript中使函数函数OO函数

在Javascript中使函数函数OO函数
EN

Stack Overflow用户
提问于 2017-05-12 15:59:35
回答 2查看 79关注 0票数 0

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

代码语言:javascript
复制
let id = a => a

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

代码语言:javascript
复制
let a = {foo:5}
a.id()  // {foo:5}

如何将第一个函数转换为第二个函数?有什么黑客可以这么做吗?我试过使用bind,但它似乎不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-13 11:48:21

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

代码语言:javascript
复制
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在这个例子中的作用只是一个巧合。

票数 1
EN

Stack Overflow用户

发布于 2017-05-12 16:04:18

你可以用bind来做

代码语言:javascript
复制
let id = a => a;
// ...
let a = {foo:5};
a.id = id.bind(null, a);
a.id(); // {foo:5}

不过,从技术上讲,bind返回一个新函数。

我认为你排除了这一点,但当然,交替地,只需定义另一个箭头:

代码语言:javascript
复制
a.id = _ => id(a);

或者一个非箭头

代码语言:javascript
复制
a.id = function() { return id(this); };

...although说,这取决于它的名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43942008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档