this
01 Sep 2023 | javascript모던 자바스크립트 딥 다이브의 내용을 읽고 정리
this 키워드
this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 참조 변수
다.
this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조 할 수 있다.
this의 특징으로는 뭐가 있을까?
this는..
- 자바스크립트 엔진에의해 암묵적으로 생성된다.
- 함수를 호출하면 arguments 객체와 this가 암묵적으로 함수 내부에 전달된다.
- 함수내부에서 arguments 객체를 지역변수로 사용할 수 있는 것 처럼, this도 지역번수로 사용할 수 있다.
단!
this가 가리키는 값 즉,this 바인딩은 함수 호출방식에 의해 동적으로 결정된다.
바인딩이란 식별자와 값을
연결하는 과정
을 의미한다. 예를들어, 변수선언은 변수이름(식별자)과 확보된 메모리 공간의 주소를 바인딩하는 것인다.this바인딩
은 this(키워드로 분류되지만 식별자 역할을 함)와 this가 가리킬 객체를 바인딩하는 것 이다.
함수 호출방식에 따른 this 바인딩
(참고) this 바인딩은 함수 호출 시점에 결정된다.
this는 함수 호출방식에 의해 동적
으로 결정된다고 정리했다. 이게 무슨 뜻일까?
- 객체 리터럴방식의 this 바인딩
// 객체 리터럴
const circle = {
radius: 5,
getDiameter() {
// this는 메서드를 호출한 객체를 가리킨다.
return 2 * this.radius;
},
};
console.log(circle.getDistance()); // 10
객체 리터럴의 메서드 내부에서의 this는 메서드를 호출한 객체
, 즉 circle을 가리킨다!
- 생성자 함수 방식의 this 바인딩
// 생성자 함수
function Circle(radius) {
// this는 생성자 함수가 생성할 인스턴스를 가리킨다.
this.radius = radius;
}
Circle.prototype.getDiameter = function () {
// this는 생성자 함수가 생성할 인스턴스를 가리킨다.
return 2 * this.radius;
};
// 인스턴스 생성
const circle = new Circle(5);
console.log(circle.getDistance()); // 10
생성자 함수 내부의 this는 생성자 함수가 생성할 인스턴스를 가리킨다. 이처럼 this는 상황에 따라 가리키는 대상이 다르다!