실행 컨텍스트(실행할 코드에 제공할 환경 정보들을 모아놓은 객체) 안에 존재하는 3가지
this는 함수를 호출할 때 결정된다.(=실행 컨텍스트가 생성될 때)
함수와 메서드는 비슷해보이지만 독립성이 다른다.
함수는 그 자체로 독립적인 기능을 수행한다.
하지만 메서드는 자신을 호출한 대상 객체에 대한 동작을 수행한다. → 실행의 주체가 있어야 한다.
함수에서 this → 전역 객체 (호출의 주체를 명시할 수 없기 떄문에)
메서드에서 this → 호출의 주체 명시할 수 있기 때문에 해당 객체
this의 할당
복습하고 적기
변수 활용
화살표 함수
call 메서드 (호출 주체인 함수를 즉시 실행하는 명령어)
apply 메서드 (call 메서드와 완전히 동일하지만 나머지 부분을 배열 형태로 넘겨줘야한다.[] )
call / apply 메서드활용
b. Array.from 메서드
// 유사배열
var obj = {
0: 'a',
1: 'b',
2: 'c',
length: 3
};
// 객체 -> 배열
var arr = Array.from(obj);
// 찍어보면 배열이 출력.
console.log(arr);
c. 상위 컨텍스트의 this를 내부함수나 콜백함수에 전달하기
변수를 활용한 우회법보다 call, apply,bind를 사용하면 깔끔하게 처리 가능
화살표 함수는 실행 컨텍스트 생성시, this를 바인딩하는 과정이 제외된다.
this가 전역 객체로서 새롭게 세팅되는 케이스가 없다.
this우회, call, apply,bind 보다 편리한 방법
유지보수나 레거시(이미 존재해서 물려내려오고 있는 코드)를 볼 때 해석할 수 있는 역량이 필요하기 때문에 여러 기법을 알아두는 것이 도움이 된다.
정리
this
는 전역 객체를 가리킨다.this
는 해당 메서드를 소유한 객체를 가리킨다.this
는 생성된 인스턴스를 가리킨다.call()
이나 apply()
로 호출할 때: this
는 인수로 전달된 객체를 가리킨다.this
는 함수가 정의된 곳의 this
를 그대로 사용한다.