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

时间:2017-04-15 04:49:45

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

我想了解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被传递到增强器中,这就是为什么我可能没有得到我想要的行为。

  • 但我在哪里打电话呢?和
  • 如何使用登录方法正确增强原始user对象,或者在定义后为其添加更多属性?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

用户 loggedInUser.login()而不是 loggedInUser()。login()

enter image description here