2017-04-15 67 views
0

我想了解如何在JavaScript中工作enhancershigh order functions以及如何編寫功能來提供裝飾功能。請解釋我如何才能使這個更高階的功能工作

所以我有一個基本的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對象或在定義之後爲其添加更多屬性?

回答

1

這是因爲你實際上分配login屬性的功能fn,不是fn返回值。您可以嘗試撥打loggedInUser.login()而不是loggedInUser().login()查看結果。

1

用戶loggedInUser.login()而不是與loggedInUser()。登錄(),

enter image description here