Page 1 of 1

tenshi님 js에서 하나 묻고 싶은것이..

Posted: 2005 01 31 22:30 56
by 박민권
setInterval() 이나 setTimeout()사용시에

setInterval('test()', 1000); 이렇게 사용하게 되는데

Code: Select all

function a(){
  this.value = 1;
}

a.prototype.test = function(){
  ++this.value;;
}

a.prototype.timer = function(){
  //this.test()를 실행시키고 싶습니다.
  setInterval("this.test()", 1000); //이럼 안되지요 ㅠ_ㅠ
}
나름대로 구글소스 다 뒤지며 찾았지만 방법을 못찾았습니다.
setInterval("a.test()", 1000); //이렇게 하더라도
a.test()가 아닌 그냥 test()로써 동작합니다.

그래서 할 수 없이

Code: Select all

setInterval("test('"+id+"')", 1000);

function out_tets(id){
  //태그엘레멘트 객체에 메소드 추가했다면 이런식으로 id명을 참조
  obj = document.getElementById('id');
   //아니면 이런식으로
   //eval('obj = ' + id);

  obj.test();
}
이런식으로 외부로 id명을 넘기고 그 id명을 토대로 객체의 메소드를
실행하는 무식한 방법을 사용하고 있습니다. OTL
이것 말고 다른 방법이 존재하는지요? 저는 몇일을 구글에서 검색해
보았어도 끝내 못찾고 말았습니다. ㅠ_ㅠ

^^

Posted: 2005 02 01 09:30 07
by tenshi
그 문제가 딱히 깔끔한 해결방안이 없더군요..

저도 library 같은것들 만들때 prototype으로 만든 class형태를 애용하는데,
그럴 때 다음과 같은 꽁수를 부렸습니다. :)

Code: Select all

a = function(aName) {
    this.aName = aName;
}

a.prototype.timeoutTest(sec) {
    setInterval(this.aName + ".test()", sec);
}

a.prototype.test() {
    alert("a.test() called");
}

// ...

var AA = new a("AA");
AA.timeoutTest(1000);
해결책을 못드려서 죄송하게 생각합니다 -_-;;;

헉!

Posted: 2005 02 01 11:19 10
by 박민권
OTL 소스를 제대로 보지도 않고 aName 속성이 존재하는줄 알고 좋아라 한참 삽질을 ㅠ_ㅠ

흑... 님도 그런 꽁수를 쓰시는군요.

자바스크립트의 한계인가봅니다.

님이 쓰는 꽁수처럼 aName같은 것만 존재해도 되는데... 흑흑...

이번에 스크롤배너 만드는데 이 부분에서 막히더군요.

그래서 스크롤배너로 변환할 레이어 객체에 직접 메소드를 할당했습니다. ㅡㅡ;

그리고 그 id를 통해서 실행시키도록 ㅠ_ㅠ

원래 목적은 새로운 객체를 생성시켜 그 객체가 레이어를 제어하게 하려고 했는데

끝내 레이어 자체가 자신을 제어하도록 메소드를 선언할 수 밖에 없었습니다.

쓰는 저야 상관없지만 디자이너들이 쉽게 사용하게 하기 위해서는 아무래도

var a = new test('a'); 등의 사용은 불편할듯 싶어서요.

같은 삽을 파신분이 계셔서 기쁩니다. ㅡㅡ;

Posted: 2005 02 01 14:16 10
by tenshi
엇..

저도 스크롤배너를 만들면서 이런 꽁수를 썼었어요 :)
한번 보셔요.. http://laintt.net/v04/jslib/smoothBanner/

Code: Select all

var a = new Test('a');
이런식이긴 하지만.. 설명을 좀 달아놓으니 그럭저럭 코더분들이 잘 사용하여 주시더군요.

앗!

Posted: 2005 02 01 17:42 13
by 박민권
앗.
저는 그 배너 스크롤이 아니라 배너가 여러게 marquee태그처럼 흘러서 지나고
또 지나가고 배너 스크롤이었어요. ㅎ~