请解释我如何使这个高阶函数工作

Please explain how I can make this higher order function work

我正在尝试了解 enhancershigh order functions 如何在 JavaScript 中工作,以及我如何编写函数来提供经过修饰的功能。

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

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,这就是为什么我可能没有得到我想要的行为。

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

user loggedInUser.login() 而不是 loggedInUser().login(),