자바스크립트의 객체 내에서 setTimeout() 구문을 사용할 경우 자기 자신인 객체를 호출하는 방법을 알아봅니다.
먼저 아래처럼 객체 하나를 만들고 간단한 setTimeout()을 실행하는 함수가 내부에 있다고 생각해봅니다.

var obj = {
  site: 'webisfree',
  getSite: function() {
    alert(this.site);
  }
};

위 객체는 사이트 이름과 사이트 이름을 출력하는 프로퍼티, 메소드를 각각 가지고 있습니다. 실행하면 사이트네임 webisfree가 잘 출력됩니다. 여기서 만약 메소드 getSite()가 3초 후 출력될 수 있도록 setTimeout()을 추가하면 어떻게 될까요?

! 타이머 3초 후 출력되는 코드
var obj = {
  site: 'webisfree',
  getSite: function() {
    setTimeout(function() {
      alert(this.site);
    }, 3000);
  }
};

위 코드는 setTimeout()이 추가된 코드입니다. 실행하면 결과는 아까와 달리 undefined를 반환합니다. 이때 어떻게하면 원하는 결과가 출력될 수 있을까요?


# 객체 내부에 자기자신 this를 변수에 저장하기

일반적으로 많이 사용되는 방법은 변수에 this 객체를 저장한 후 호출하는 방법이 있습니다.

var obj = {
  site: 'webisfree',
  getSite: function() {
    vat _this = this;
    setTimeout(function() {
      alert(_this.site);
    }, 3000);
  }
};

변수 _this는 setTimeout() 구문이 실행되기 이전에 this 정보를 담고 있습니다. 그래서 이 변수에는 자기자신인 this 키워드의 객체 정보를 가지게됩니다.