항해3주차 - Node.js (32) This
his란 JavaScript 예약어다.
미래에 해당 객체의 개체가 될 아이들, 즉 "상황에 따라 그때 그때 달라질 뭔가를 가르키기 위해서 사용하고 있다."
기본적으로 자바스크립트에서의 this도 맥락은 같다.
프로퍼티나 메서드가 자기를 참조 할 수 있게끔 인스턴스 생성 이후에 해당 인스턴스를 가르키기 위해서 사용한다.
하지만 자바스크립트에서의 this는 실행 컨텍스트가 생성될 때 함께 결정된다.
실행 컨텍스트는 함수를 호출 할 때 생성되므로, this는 함수를 "호출" 할 때 결정된다고 할 수 있다.
그래서 어떤 방식으로 호출하냐에 따라 값이 달라진다고 함.
this란 함수를 호출할 때 생성되는 실행 컨텍스트 객체다. this가 가리키는 대상은 어떻게 this가 호출되는지에 따라 다르다
this가 가리키는 대상은 어떻게 this가 호출되는지에 따라 다르다. 아래 상황별로 this의 의미를 나눌 수 있다.
→ 전역 공간에서의 this : 전역 공간에서 this는 전역 객체를 가리킴: (this 콘솔에 찍으면 전역객체 나온다는 뜻)
→ 메서드로서 호출할 때 내부에서의 this : 메서드 내부에서의 this는 호출한 주체에 대한 정보임. 여기서 호출한 주체란
함수명(프로퍼티명) 바로 앞의 객체임. 즉 마지막 점 앞에 명시된 객체를 말함.
→ 함수로서 호출할 때 내부에서의 this: 그냥 함수로서 호출할 때는 this가 지정되지 않음
→ 콜백 함수 호출 시 내부에서의 this
→ 생성자 함수 내부에서의 this : 생성자 함수란 어떤 공통된 성질을 지니는 객체들을 생성하는 데 사용하는 함수다.
생성자를 클래스(class), 클래스를 통해 만든 객체를 인스턴스(instance)라고 함
생성자 함수 내부에서의 this는 새로 만들 구체적인 인스턴스 자신이 됨
------------------------------아래와 같은 설명이 좀 더 이해하기 쉽다---------------------------------------
자바스크립트 내에서 this는 '누가 나를 불렀느냐'를 뜻한다고 한다.
즉, 선언이 아닌 호출에 따라 달라진다는 것.
그럼 각 상황별로 this가 어디에 바인딩되는지 알아보자.
1. 단독으로 쓴 this
2. 함수안에서 쓴 this
3. 메서드 안에서 쓴 this
4. 이벤트 핸들러 안에 쓴 this
5. 생성자 안에서 쓴 this
6. 명시적 바인딩을 한 this
7. 화살표 함수로 쓴 this
잠깐, 바인딩이란?
- 식별자와 값을 연결하는 과정을 말한다.
- 변수선언은 변수 이름과 확보된 메모리 공간의 주소를 바인딩하는 것이다.
- this 바인딩은 this(키워드로 분류되지만 식별자의 역할을 한다.)와 this가 가리킬 객체를 바인딩하는 것이다.