this는 자신이 속한 객체, 혹은 생성할 인스턴스를 가리키는 자기참조 변수이다.
일반적으로
자신이 속한 객체를 가리키기 위해 쓰인다.
객체를 이루는 프로퍼티와 메서드는 각각 상태와 동작을 담당한다.
메서드는 프로퍼티를 참조하고 이 상태를 변경하는데,
이를 위해서는 자신이 속한 객체를 참조할 수 있어야 한다.
객체리터럴에서는 이것이 가능하지만, 생성자 함수에서는 어렵다.
왜 생성자 함수에서는 this없이 자신을 가리키는 식별자를 참조하기 어려울까?
메서드 호출 시점에 객체가 생성되기 때문에, 참조하는 시점에 식별자에 이미 할당이 완료된다.
따라서 메서드 내부에서 메서드를 호출한 자기자신의 객체를 참조할 수 있다.
프로퍼티, 메서드를 추가하려면 생성할 인스턴스를 참조할 수 있어야 한다.
그런데 이 인스턴스 생성을 하려면 생성자 함수가 필요하고,
생성자 함수를 만드려면 프로퍼티와 메서드를 추가해야 한다.
따라서 각 단계가 그 전단계가 완료가 되어야 값을 참조할 수 있기 때문에 this로 미래에 생성할 인스턴스를 바인딩해주는 것이다.
Java, C++과 같은 클래스 기반 언어에서 this는 늘 클래스가 생성하는 인스턴스를 가리킨다.
하지만 Javascript에서는 함수 호출 방식에 따라 this의 값이 동적으로 결정된다.