*이 필기는 웹 프로그래밍 튜토리얼에서 보고 작성합니다.
1. this 키워드
this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수이다. 이걸로 프로퍼티와 메서드를 참조할 수 있다.
그렇다면 이 this가 가리키는 값은 어떻게 결정될까 바로 함수 호출 방식에 따라서 결정된다.
2. 함수 호출 방식과 this 바인딩
아까 말했듯이, this 바인딩은 함수 호출 방식 즉 함수가 어떻게 호출되었는지에 따라 동적으로 결정된다.
그러면 함수 호출 방식은 어떻게 되어있는지 보자.
- 일반 함수 호출
- 메서드 호출
- 생성자 함수 호출
- Function.prototype.apply/call/bind 메서드에 의한 간접 호출
일반 함수 호출
기본적으로 this에는 전역 객체가 바인딩된다.
그리고 일반 함수로 호출할 때 함수 내부의 this에는 전역 객체가 바인딩된다.
하지만 객체를 생성하려고 만든 함수가 아니라면 this가 의미가 없다. 따라서 strict mode 에서는 일반 함수 내부의 this에는 undefined가 바인딩된다고 한다.
메서드 호출
메서드를 호출할 때 메서드 이름 앞의 마침표(.) 연산자 앞에 기술한 객체가 바인딩된다.
생성자 함수 호출
생성자 함수 내부의 this에는 생성자 함수가 생성할 인스터스가 바인딩된다.
Function.prototype.apply/call/bind 메서드에 의한 간접 호출
이 메서드를 써서 this로 사용할 객체를 지정할 수 있다.
여기까지 입니다 - 틀린 점이 있다면 꼭 지적해주세요!