2017-04-15 10 views
0

enhancers 또는 high order functions이 JavaScript로 작동하는 방식과 장식 된 기능을 전달하는 함수를 작성하는 방법을 이해하려고합니다.이 higher order function work를 어떻게 만들 수 있는지 설명하십시오.

function user() { 
    return { 
    name: 'amit', 
    age: 41 
    } 
} 

지금 나는이 공장 모의 login 방법과 같은 인증 동작을 추가합니다 :

그래서 나는 기본적인 user 공장 기능을 가지고있다. 그래서

function authUser(fn) { 
    fn.login =() => { 
    return 'you are now logged in' 
    } 
    return fn 
} 

가 지금은

let loggedInUser = authUser(user) 

하지만이 같은 login 메소드를 호출 할 때 ...

loggedInUser().login() 

내가

를 얻을이 증강에 user 전달이 증강을 쓰기
Uncaught TypeError: loggedInUser(...).login is not a function 

나는 fn이 인핸서 (enhancer)에 전달되는 것을 정말로 부르지 않는다는 것을 이해하고 그것이 내가 원하는 행동을 얻지 못하는 이유 일 것이다.

  • 어디에서 부르겠습니까? 및
  • 원래 user 개체를 로그인 메서드로 올바르게 향상 시키거나 정의 후에 더 많은 속성을 추가하려면 어떻게해야합니까?

답변

1

실제로 fn, fn 아닌 반환 된 값을 기능 login 속성을 할당하고 때문입니다. 결과를 보려면 loggedInUser().login() 대신 loggedInUser.login()을 호출 해보십시오.

1
대신 loggedInUser에의(). 로그인()

사용자 loggedInUser.login()

enter image description here