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

Javascript 请解释我如何使这个高阶函数工作,javascript,reactjs,ecmascript-6,decorator,higher-order-functions,Javascript,Reactjs,Ecmascript 6,Decorator,Higher Order Functions,我试图了解增强器或高阶函数如何在JavaScript中工作,以及如何组合函数以提供修饰功能 因此,我有一个基本的用户工厂功能: function user() { return { name: 'amit', age: 41 } } 现在我想向这个工厂添加身份验证行为,比如mocklogin方法。所以我写了这个增强剂 function authUser(fn) { fn.login = () => { return 'you are now logge

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

因此,我有一个基本的
用户
工厂功能:

function user() {
  return {
    name: 'amit',
    age: 41
  }
}
现在我想向这个工厂添加身份验证行为,比如mock
login
方法。所以我写了这个增强剂

function authUser(fn) {
  fn.login = () => {
    return 'you are now logged in'
  }
  return fn
}
let loggedInUser = authUser(user)
现在我将
user
传递到这个增强器中

function authUser(fn) {
  fn.login = () => {
    return 'you are now logged in'
  }
  return fn
}
let loggedInUser = authUser(user)
但是当我尝试调用
login
这样的方法时

loggedInUser().login()
我明白了

我明白我并不是真的把fn称为传递到增强器中,这就是为什么我可能没有得到我想要的行为

  • 但是我把它叫什么?及
  • 如何使用登录方法正确增强原始
    用户
    对象,或在定义后向其添加更多属性

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

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

      userloggedInUser.login()而不是loggedInUser().login()


      userloggedInUser.login()而不是loggedInUser().login()