자바스크립트의 객체 내에서 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 키워드의 객체 정보를 가지게됩니다.