동작을 나타내는 메서드는 자신이 속한 객체의 상태, 즉 프로퍼티
를 참조하고 변경할 수 있어야 한다. 이때 메서드가 자신이 속한 객체의 프로퍼티를 참조하려면 먼저 자신이 속한 객체를 가리키는 식별자
를 참조할 수 있어야 한다.
객체 리터럴 방식으로 생성한 객체의 경우 메서드 내부에서 자신이 속한 객체를 가리키는 식별자를 재귀적으로 참조할 수 있다.
생성자 함수를 정의하는 시점에는 아직 인스턴스를 생성하기 이전이므로 생성자 함수가 생성할 인스턴스를 가리키는 식별자를 알 수 없다. 따라서 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 특수한 식별자가 필요한데 이것이 바로 this
이다.
하지만 this
가 가리키는 값은 함수 호출 방식에 의해 동적으로 결정된다.
일반 함수 호출
기본적으로 this에는 전역 객체가 바인딩된다. 하지만 this
는 프로퍼티나 메서드를 참조하기 위한 자기 참조 변수이므로 객체를 생성하지 않는 일반 함수에서 this
는 아무 의미가 없다.
메서드 내에서 정의한 중첩 함수도 일반 함수로 호출되면 중첩 함수 내부의 this는 전역 객체가 바인딩된다.
메서드 호출
메서드 내부의 this
는 메서드를 소유한 객체가 아닌 메서드를 호출한 객체에 바인딩된다 는 것을 기억해야 한다.
생성자 함수 호출
생성자 함수 내부의 this
에는 생성자 함수가 생성할 인스턴스가 바인딩된다. 만약 new 연산자와 함께 생성자 함수를 호출하지 않으면 생성자 함수가 아니라 일반 함수로 동작한다.
많은 도움이 되었습니다, 감사합니다.