我试图了解增强器
或高阶函数
如何在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/