const getFullName = () => '${this.firstName} ${this.lastName}';
const user = {
firstName: 'Adam',
lastName: 'Smith',
getFullName: getFullName,
};
console.log(user.getFullName());
- Arrow Function에서 this의 값은 일반함수처럼 호출한 대상에 따라 상대적으로 변하지 않고, Arrow Function이 선언되기 직전에 유효한 this값과 똑같은 값을 가지고서 동작하게 된다.
- getFullName이 선언될 때 this의 값은 전역 객체인 window 객체가 된다.
- getFullName 함수를 실행하려고 하면, window 객체의 firstName과 lastName 프로퍼티에 접근하려고 할 것이다.
- 그러므로 위의 코드를 실행하면 undefined undefined가 출력된다.
- 만약 메소드를 만들 때 this 메소드를 호출한 객체를 가리키고 싶다면 Arrow Function 보다는 일반함수를 활용해야 한다.
- this를 활용한 메소드를 다른 여러 객체에 활용한다고 해서 반드시 전역 scope를 가지는 함수를 만들 필요는 없다.
- 일반함수로 this를 활용한 메소드를 객체 내부에서 선언하고, 다른 객체에서 그 메소드를 참조하더라도 this는 항상 그 메소드를 호출한 객체를 가리키게 된다.