JavaScript 학습 노트 Black.Capfeine 09.11.28

1.이전에 쓴 것 은 분 산 된 함수 입 니 다.어떤 기능 을 사용 하면 어떤 함 수 를 쓰 는 지 깔끔 하지 못 하 다 고 생각 합 니 다.그래서 이번에 쓴 것 은 봉 인 된 클래스 입 니 다.사용 하기에 괜 찮 지만 매개 변 수 를 전달 할 때 많은 문제 가 발생 했 습 니 다.그래서 많은 자 료 를 찾 아 보 았 습 니 다.다음 과 같이 요약 합 니 다.1)동적 바 인 딩 사건 문제:onclick 사건 을 대상 에 연결 해 야 합 니 다.예 를 들 어 목록 항목.addEventListener 나 attachEvent 를 사용 해 야 합 니 다.덮어 쓰 는 것 이 아니 라 함수 작업 을 이벤트 에 추가 해 야 합 니 다.단,attachEvent 는 FF 를 지원 하지 않 습 니 다.FF 는 addEventListener 만 사용 할 수 있 습 니 다.so,하나의 함수 가 필요 합 니 다.그들 둘 을 종합 시 켜 야 합 니 다.그래서 이 함수 가 탄생 했 습 니 다.
 
function addEventHandler(oTarget, sEventType, fnHandler)
{
    if(oTarget.addEventListener)
    {oTarget.addEventListener(sEventType, fnHandler, false);}
    else if(oTarget.attachEvent)
    {oTarget.attachEvent('on' + sEventType, fnHandler);}
    else{oTarget['on' + sEventType] = fnHandler;}
}
2)this 매개 변 수 를 전달 하 는 문제 입 니 다.제 가 함수 와 속성 을 모두 한 종류 에 포 장 했 기 때문에 onclick 과 같은 사건 은 하나의 문제 가 발생 할 수 있 습 니 다.예 를 들 어 addEventHandler(this.elems[i],"click",this.Move).이렇게 하면 오류 가 발생 합 니 다.onclick 사건 이 발생 했 을 때 호출 된 this 는 이 패 키 징 을 가리 키 는 클래스 가 아니 기 때문에 apply()를 사용 해 야 합 니 다~-특정한 대상 의 방법 을 응용 하여 다른 대상 으로 현재 대상 을 교체 해 야 합 니 다.구체 적 인 형식 은 말 할 필요 도 없습니다.인터넷 에 많은~함수:
 
var Bind = function(object,func){
        var args = Array.prototype.slice.call(arguments).slice(2);
        return function(){
            return func.apply(object,args);
        }
    }
호출:this.fnMove=Bind(this,this.move,i);//this.move 는 내 가 정의 한 구성원 함수 로 클래스 에 봉 인 됩 니 다//this.elems[i].onclick=this.fnMove;//위 에 있 는 그 말 을 이 말로 바 꿔 도 됩 니 다.다만,onclick 사건 은 this 로 바 뀌 었 습 니 다.fnMove,this 를 추가 하 는 것 이 아 닙 니 다.fnMove 들 어가 addEventHandler(this.elems[i],"click",this.fnMove); 이렇게 하면 OK~PS.call()도 기본적으로 같은 기능 이지 만 구체 적 인 매개 변 수 는 다 릅 니 다.2.setInterval 문제 1)와 setTimeout 의 차 이 는 일반적인 상황 에서 setTimeout 은 한 번 만 실 행 됩 니 다.(물론 한 함수 에서 setTimeout 을 반복 적 으로 호출 하면 중복 실 행 됩 니 다)그리고 setInterval 은 중복 실 행 될 수 있 습 니 다.clearIntercal()2)IE 에서 호 환 되 지 않 는 문제 라 는 문제 가 저 를 50%괴 롭 혔 습 니 다.원래 chrome,ff,safari 에서 잘 작 동 되 었 는데 저 는 상당히 흥분 하여 IE 를 잊 었 습 니 다.나중에 IE 에서 시험 해 봤 더 니 끝 났 습 니 다.수정,구 글(여 기 는 동사,헤헤),거의 반나절 이 걸 렸 죠?드디어 끝 났 습 니 다.이전에 문 구 는 다음 과 같 았 다.this.timer=setInterval(this.unfold,5,this.divs[index],this);결 과 는 IE 하에 서 전혀 사용 되 지 않 았 다.마지막 으로 한 협객 의 글 에서 다음 과 같은 설명 을 보 았 다.IE 에서 setTimeout 과 setInterval 은 매개 변수 전달 을 지원 하지 않 는 다.문 제 는 곧 해결 되 었 다.역시 내 가 너무 못 했 어~문 제 를 해결 하 는 함 수 는 다음 과 같 아.
 
var mySetInterval = setInterval;
window.setInterval = function(callback, interval)
{
var args = Array.prototype.slice.call(arguments, 2);
function callFn(){callback.apply(null, args);}
return mySetInterval(callFn, interval);
}

var mySetTimeOut = setTimeout; // setInterval
window.setTimeout = function(callback, timeout)
{
var args = Array.prototype.slice.call(arguments, 2);
function callFn(){callback.apply(null, args);}
그리고 window.setTimeout 이나 window.setInterval 로 호출 하면 돼~내 문 구 는 다음 과 같 아.this.timer=window.setInterval(this.unfold,5,this.divs[index],this);/그 중에서 this.divs[index],this 는 전달 하 는 두 가지 매개 변수 입 니 다.그 협객 에 게 다시 한 번 감 사 드 립 니 다.비록 그 는 저 를 모 르 지만~현재 IE 에서 조판 의 작은 문제 가 있 습 니 다.계속 공부 하 세 요~전력 토끼!

좋은 웹페이지 즐겨찾기