Javascrpt에서의 this는 상황에 따라 지칭하는 대상이 바뀐다. 그 상황은 '함수가 호출되는 상황'을 의미한다. Javascript의 this는 일단 기본적으로 함수가 호출될 때 결정되며, 보통 자신을 호출한 주체의 정보가 담기게 된다. 함수가 호출되는 상황은 크게 4가지가 있다.
함수는 그 자체로 혼자서 독립적인 기능을 수행하는 경우 어딘가에 종속되지 않기 때문에, 함수는 호출한 주체 또한 없다. this는 자신을 호출한 주체의 정보를 담는다는 이야기를 했었는데, 함수 자체가 호출주체 없이 독립적으로 존재하면 this는 전역객체를 가리키게 된다.
메서드는 자신을 호출한 대상에 종속되어 있다. 호출한 대상은 쉽게말해 메서드 왼쪽에 명시된 객체라고 생각하면 된다. 어떤 객체에 종속된다는 메서드의 특징은 this에도 그대로 적용이 된다. 메서드로 호출된 this는 부모 객체를 기준으로 바인딩되기 때문이다.
생성자 함수는 어떤 공통된 성질을 갖는 객체들을 생성하는데 쓰이는 함수이다. 인스턴스를 찍어내는 일종의 '틀' 같은 역할을 하는 것이다. new 키워드에서 this는 새롭게 생성된 인스턴스 객체를 의미한다.
앞서 말한 this는 어떠한 규칙에 의해 자체적으로 적용되었다. 하지만, call이나 apply 메서드를 사용하면 this를 별도의 대상으로 지정할 수 있게 된다. call/apply 호출에서는 첫번째 인자로 들어가는 값이 바로 this이다.