모던 자바스크립트 Deep Dive - 22장 this

밀루·2023년 11월 6일
0

this 키워드

동작을 나타내는 메서드는 자신이 속한 객체의 상태(프로퍼티)를 참조하고 변경할 수 있어야 함 > 자신이 속한 객체를 가리키는 식별자를 참조할 수 있어야 함

this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수

this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조할 수 있음

this 바인딩은 함수 호출 방식에 의해 동적으로 결정됨

객체 리터럴 내부에서의 this는 메서드를 호출한 객체

생성자 함수 내부의 this는 생성자 함수가 생성할 인스턴스

전역에서의 this는 window
(그러나 this는 객체의 프로퍼티나 메서드를 참조하기 위한 자기 참조 변수로 메서드 내부 또는 생성자 함수 내부에서만 의미가 있음)

일반 함수 내부에서는 this 사용할 필요가 없음 (strict-mode에서는 undefined)


함수 호출과 this 바인딩

일반 함수 호출

this에는 전역 객체가 바인딩된다

메서드 호출

메서드 내부의 this에는 메서드를 호출한 객체(메서드를 호출할 때 마침표 연산자 앞에 기술한 객체)가 바인딩된다

메서드는 객체에 포함된 것이 아니라 함수 이름을 뜻하는 프로퍼티(ex. getName)가 독립적으로 존재하는 별도의 객체를 가리키고 있는 것이다

때문에 메서드 내부 this는 프로퍼티로 메서드를 가리키고 있는 객체와 관계없이 메서드를 호출한 객체에 바인딩됨

(프로토타입 메서드도 같다)

생성자 함수 호출

생성자 함수 내부 this에는 생성자 함수가 (미래에) 생성할 인스턴스가 바인딩된다

Function.prototype.apply/call/bind 메서드에 의한 간접 호출

첫 번 째 인수로 전달한 특정 객체를 호출한 함수의 this에 바인딩한다


함수 호출 방식에 따른 this 바인딩

  • 일반 함수 호출(중첩, 콜백함수 포함) - window(전역 객체)
  • 메서드 호출 - 메서드를 호출한 객체
  • 생성자 함수 호출 - 생성자 함수가 생성한 인스턴스
  • Function.prototype.apply/call/bind 메서드에 의한 간접 호출 - 메서드에 첫 번째 인수로 전달한 객체
profile
이밀루의 도전

0개의 댓글