请解释我如何使这个高阶函数工作
Please explain how I can make this higher order function work
我正在尝试了解 enhancers
或 high 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
对象或在定义后向其添加更多属性?
这是因为您实际上是将 login
属性 分配给函数 fn
,而不是 fn
的返回值。您可以尝试调用 loggedInUser.login()
而不是 loggedInUser().login()
来查看结果。
user loggedInUser.login() 而不是 loggedInUser().login(),
我正在尝试了解 enhancers
或 high 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
对象或在定义后向其添加更多属性?
这是因为您实际上是将 login
属性 分配给函数 fn
,而不是 fn
的返回值。您可以尝试调用 loggedInUser.login()
而不是 loggedInUser().login()
来查看结果。
user loggedInUser.login() 而不是 loggedInUser().login(),