2012년 2월 28일 화요일

Javascript prototype 에서 this 의 scope 문제

prototype 에서 this 사용시 scope 에 유의해야 한다.

예) x 라는 객체가 있고 doSomething() 함수를 부르면 1초 후에 x 의 hello() 함수를 부른다.

function x() {}

x.prototype.hello = function() {
    alert("Hello");
}

x.prototype.doSomething = function() {
    setTimeout(function() {this.hello();}, 1000); // this 를 쓰면 안된다.
}


디버깅 툴을 열고 아래 버튼을 눌렀을 때 hell() 함수를 찾을 수 없다는 에러를 확인한다.


다음과 같이 고쳐 쓴다.

var me = this;
setTimeout(function() {me.hello();}, 1000);

아래는 성공한다.

댓글 없음:

댓글 쓰기