사건 대 리 를 잘 활용 하여 폐쇄 적 인 성능 함정 을 경계 하 다.
2451 단어 이벤트 에이전트폐쇄 를 경계 하 다
var apply = function() {
this.div = document.getElementById("div id");
this.hot = this.div.getElementsByTagName("a");
for(var i=0; i<this.hot.length; i++) {
this.hot[i].onclick = function(me) {
return function() {
me.edit(this);
}
}(this);
}
}
apply.prototype = {
edit: function(target) {
}
}
여기 서 발생 하 는 문 제 는 매번 의 순환 입 니 다.위 에서 설명 한 제어 할 수 없 는 메모리 주 소 를 메모리 에 기록 합 니 다.물론 찾 을 수 없고 사용 할 필요 가 없 을 때 정리 할 수 없습니다.js 의 회수 체 제 는 그 가 언제 쓸모 가 없 는 지 모 르 고 쓰레기 주소 가 발생 합 니 다.그리고 div 내 dom 구조 가 바 뀌 었 을 때 이 a 라벨 을 다시 찾 아서 연결 해 야 합 니 다.물론 이것 을 부분 변수 에 추가 할 수 있 습 니 다:var me=this;적어도 이렇게 하면 제어 할 수 있 습 니 다.국부 변수 me 를 null 로 수시로 설정 할 수 있 습 니 다.js 의 쓰레기 회수 체 제 는 이런 쓸모없는 데 이 터 를 언제 치 울 지 알 수 있 습 니 다.그러나 이것 도 최선 의 해결 방안 이 아니 며,많은 사람들 이 이런 아름 답지 않 은 인 코딩 방식 을 좋아 하지 않 을 것 으로 예상 된다.가장 좋 은 해결 방법 은 물론 내부 의 구조 에 관심 을 가 질 필요 도 없고 내부 의 어떤 요소 에 도 변 수 를 밝 히 지 않 는 다.그러면 사건 대리 의 업무 이다.이벤트 에이전트 란 무엇 입 니까?즉,모든 하위 대상 에 게 이 벤트 를 연결 할 필요 가 없습니다.거품 메커니즘 을 통 해 현재 트리거 이벤트 의 요 소 를 찾 고 자신의 일련의 규칙 을 통 해 최종 처리 함 수 를 찾 을 수 있 습 니 다.이벤트 에이전트 모드 를 사용 하면 위 에서 설명 한 수 요 를 어떻게 실현 해 야 합 니까?다음 과 같다
var apply = function() {
this.div = document.getElementById("div id");
this.div.onclick = function(me) {
return function() {
var _event = arguments.callee.caller.arguments[0];
var target = _event.target || _event.srcElement;
if(target.tagName == "a")
me.edit(target);
else
return false;
}
}(this);
}
apply.prototype = {
edit: function(target) {
}
}
지금 우 리 는 용기 요소 가 무엇 인지 에 만 관심 을 가지 고 그의 내부 에 몇 개의 a 가 있 는 지,그들 이 변화 하 는 지 등에 관심 을 가지 지 않 는 다.성능 의 차 이 는 분명 하 다.10 분 동안 마음대로 쓰 면 좀 혼 란 스 럽 습 니 다.몇몇 친구 들 에 게 유용 하 기 를 바 랍 니 다.만약 착오 가 있 으 면 여러분 의 지 도 를 바 랍 니 다.auntion / 2011-11-15 mail [email protected] 82874972 오리지널 글,이 부분 을 남 겨 주세요.