javascript - 请解释一下如何使这个高阶函数起作用

标签 javascript reactjs ecmascript-6 decorator higher-order-functions

我试图了解增强器高阶函数如何在JavaScript中工作,以及如何组合函数来提供装饰功能。

所以我有一个基本的用户工厂函数:

function user() {
  return {
    name: 'amit',
    age: 41
  }
}

现在我想向该工厂添加身份验证行为,例如模拟 login 方法。所以我写了这个增强器

function authUser(fn) {
  fn.login = () => {
    return 'you are now logged in'
  }
  return fn
}

现在我将user传递给这个增强器

let loggedInUser = authUser(user)

但是当我尝试像这样调用 login 方法时......

loggedInUser().login()

我明白了

Uncaught TypeError: loggedInUser(...).login is not a function

我知道我并没有真正调用传递给增强器的 fn,这就是为什么我可能没有得到我想要的行为。

  • 但是我在哪里调用它呢?和
  • 如何使用登录方法正确增强原始 user 对象或在定义后向其添加更多属性?

最佳答案

这是因为您实际上是将 login 属性分配给函数 fn,而不是 fn 的返回值。您可以尝试调用 loggedInUser.login() 而不是 loggedInUser().login() 来查看结果。

关于javascript - 请解释一下如何使这个高阶函数起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43422317/

相关文章:

Javascript 从 dat.GUI 获取值

javascript - 不属于 TypeScript 类型的自动跳过属性

javascript - Chrome 开发者工具未反射(reflect)对我的 JavaScript 文件的已保存更改

reactjs - React Router 和 Express 冲突

javascript - 匹配数组属性值中的特定文本然后替换并且仅输出替换值

javascript - Eslint 禁用行抛出错误

javascript - 为什么我的登录脚本不起作用?

javascript - 使用 ReactJS 自动选择 span 标签

reactjs - 无法启动克隆的 react 应用程序

javascript - 包装具有可选位置参数的函数