setTimeout 을 참 많이 사용합니다.
뭔가 애니메이션을 만들 때 참 많이 쓰는 것 같습니다. 요즘엔 jQuery를 이용하면 애니메이션은 쉽게 만들 수 있긴 합니다만..
제 경우엔 검색 제안을 만들 때 이 함수를 썼습니다.
근데, 최근에 클래스에서 쓸 일이 생겨서 써 봤는데, 거 참 이상합니다.
일단 기본적으로 이런 식으로 많이 사용을 하죠~
어? 인수를 넣고 싶습니다.
이렇게 하면 되긴 합니다. bbb라는 변수를 인수로 넣으려면??
이러면 되긴 해요~ 근데 문제가 있습니다. 문자열 밖에 전송이 안되는 것!
개체를 넘겨주고 싶은데 저렇게 쓰면 당연히 오류가 나겠죠??
그래서 setTimeout 레퍼런스를 보면! 앗! 세번째 인수를 넣을 수 있습니다.
이런 식으로 run이라는 함수를 실행시키는데 500ms로 인수로는 bbb를 넣어서!!
bbb 다음에 또 인수를 넣으면 그건 두번째 인수로 들어가게 됩니다. 좋죠?
자! 이걸 이용해서 클래스를 만들어 보려고 했습니다.
이런!
클래스 내에 있는 함수를 실행하려고 했더니 'this'키워드가.. window를 가리키고 있군요 -_-;
현재 객체의 run 함수를 실행하려고 위와 같이 했더니... run 함수가 실행되기는 하지만
run 함수 내에서 쓰이는 'this'키워드는 현재 객체를 가리키지 않고 'window'를 가리키고 있습니다. 이런 난감한...
그래서 이런 방법을 쓰더군요~ (구글링을 해보니 많이 나오는 자료 입니다)
현재 객체를 인수로 받는 함수 자체를 setTimeout에 넣어버리면 run 함수에서는 현재 객체를 this로 받습니다.
오~ 이렇게 하니 뭔가 편해졌네요~
그런데 이거 FireFox에서는 되는데... InternetExplorer에서는 안되네요.. -_-;
그래서 그냥
이렇게 했습니다.
뭔가 애니메이션을 만들 때 참 많이 쓰는 것 같습니다. 요즘엔 jQuery를 이용하면 애니메이션은 쉽게 만들 수 있긴 합니다만..
제 경우엔 검색 제안을 만들 때 이 함수를 썼습니다.
근데, 최근에 클래스에서 쓸 일이 생겨서 써 봤는데, 거 참 이상합니다.
일단 기본적으로 이런 식으로 많이 사용을 하죠~
setTimeout("run()",500);
어? 인수를 넣고 싶습니다.
setTimeout("run(3)",500);
이렇게 하면 되긴 합니다. bbb라는 변수를 인수로 넣으려면??
setTimeout("run('"+bbb+"')",500);
이러면 되긴 해요~ 근데 문제가 있습니다. 문자열 밖에 전송이 안되는 것!
개체를 넘겨주고 싶은데 저렇게 쓰면 당연히 오류가 나겠죠??
그래서 setTimeout 레퍼런스를 보면! 앗! 세번째 인수를 넣을 수 있습니다.
setTimeout(run,500,bbb);
이런 식으로 run이라는 함수를 실행시키는데 500ms로 인수로는 bbb를 넣어서!!
bbb 다음에 또 인수를 넣으면 그건 두번째 인수로 들어가게 됩니다. 좋죠?
자! 이걸 이용해서 클래스를 만들어 보려고 했습니다.
이런!
클래스 내에 있는 함수를 실행하려고 했더니 'this'키워드가.. window를 가리키고 있군요 -_-;
setTimeout(this.run,500,bbb);
현재 객체의 run 함수를 실행하려고 위와 같이 했더니... run 함수가 실행되기는 하지만
run 함수 내에서 쓰이는 'this'키워드는 현재 객체를 가리키지 않고 'window'를 가리키고 있습니다. 이런 난감한...
그래서 이런 방법을 쓰더군요~ (구글링을 해보니 많이 나오는 자료 입니다)
setTimeout(function(obj){obj.run(bbb);}, 500, this);
현재 객체를 인수로 받는 함수 자체를 setTimeout에 넣어버리면 run 함수에서는 현재 객체를 this로 받습니다.
오~ 이렇게 하니 뭔가 편해졌네요~
그런데 이거 FireFox에서는 되는데... InternetExplorer에서는 안되네요.. -_-;
그래서 그냥
var obj = this;
setTimeout(function(){obj.run(bbb);},500);
setTimeout(function(){obj.run(bbb);},500);
이렇게 했습니다.