2017-04-15 4 views
0

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 
} 

このエンハンサーを書く今、私は

を得る

loggedInUser().login() 

...私は、このエンハンサー

let loggedInUser = authUser(user) 

userを渡すしかし、私はこのようなloginメソッドを呼び出すしようとすると、

Uncaught TypeError: loggedInUser(...).login is not a function 

私は本当にエンハンサーに渡されているfnを呼んでいるわけではないことを理解しているので、おそらく私が望む振る舞いを得られないのでしょう。

  • しかし、どこから呼びますか?
  • 元のuserオブジェクトをloginメソッドで正しく拡張するか、定義後にプロパティを追加するにはどうすればよいですか?

答えて

1

あなたが実際にfnfnのない戻り値を機能させるloginプロパティを代入しているためです。結果を確認するにはloggedInUser().login()の代わりにloggedInUser.login()を呼び出すことができます。

1

代わりloggedInUserのユーザloggedInUser.login()()。ログイン()、

enter image description here

関連する問題