2012-08-08 2 views
1

나는 초보자 프로그래머입니다. OO 방식으로 스크립트를 만들고 싶습니다. 그러나 내 속성을 보호하고 액세스 할 수있는 방법을 생각할 수 없습니다.자바 스크립트 - 이벤트 함수에서 객체 속성에 액세스하는 방법?

var imageViewer=function(imageWrapper) 
{ 
    var hasTouch = 'ontouchstart' in window, 
    resizeEvent = 'onorientationchange' in window ? 'orientationchange' : 'resize', 
    startEvent = hasTouch ? 'touchstart' : 'mousedown', 
    moveEvent = hasTouch ? 'touchmove' : 'mousemove', 
    endEvent = hasTouch ? 'touchend' : 'mouseup', 
    cancelEvent = hasTouch ? 'touchcancel' : 'mouseup'; 

    this.imgContainer=imageWrapper; 
    this.image=imageWrapper.getElementsByTagName("img")[0]; 
    this.initScale=1; 
    this.scaleLevel=this.initScale; 
    this.startPoint={x:0,y:0} 

    //alert(this.image) 
    this.initEvents=function() 
    { 
     window.addEventListener(resizeEvent, this.resizeImageViewer, false); 
     this.imgContainer.addEventListener(startEvent, this.handleStartEvent, false); 
     this.imgContainer.addEventListener(moveEvent, this.handleMoveEvent, false); 
     this.imgContainer.addEventListener(endEvent, this.handleEndEvent, false); 
    } 

    this.resizeImageViewer=function(event) 
    { 
     /*not finish*/ 
    } 

    this.handleStartEvent=function(event) 
    { 
     /**********problem goes here*************/ 
     this.startPoint.x = event.offsetX || (event.pageX - this.imgContainer.offsetLeft); 
     this.startPoint.y = event.offsetY || (event.pageY - this.imgContainer.offsetTop); 
    } 

    this.handleMoveEvent=function(event) 
    { 
     /*not finish*/ 
    } 

    this.handleEndEvent=function() 
    { 
     /*not finish*/ 
    } 

    this.initEvents(); 
} 

var imageViewerObj = new imageViewer(document.getElementById("imageWrapper")); 

내가 this을 알고 :

"TypeError: this.imgContainer is undefined"

전체 스크립트는 다음과 같습니다 : 문제는 그 기능

this.handleStartEvent=function(event) 

방화범의 오류 메시지에 내 this.XXX 속성에 액세스하지 못할 것입니다 imgContainer이 아니고 imageViewer이 될 것입니다. 그러나 제게는 imageViewer 님의 부동산 정보를 얻는 방법을 모르겠습니다. e startPointinitScale. 누군가 나를 안내 할 수 있을까요?

답변

1

단지 다른 변수에 저장합니다

var imageViewer = function(imageWrapper) 
{ 
    var self = this; // use "self" instead of "this" later 

    ... 

    self.startPoint={x:0,y:0} 

    self.initEvents=function() 
    { 
     window.addEventListener(resizeEvent, self.resizeImageViewer, false); 
     self.imgContainer.addEventListener(startEvent, self.handleStartEvent, false); 
     self.imgContainer.addEventListener(moveEvent, self.handleMoveEvent, false); 
     self.imgContainer.addEventListener(endEvent, self.handleEndEvent, false); 
    } 

    ... 

    self.initEvents(); 
} 
+0

잘 작동합니다! 고맙습니다 ~ 해결책을 ~ –

+0

@ 크리스. 오신 것을 환영합니다. – bniwredyc

0

imgContainer는 아이 this.parent.getChildAt(index).getAttribute(...);

선택하려는 요소의 수 (인덱스)와 인덱스를 교체하는 경우 부모가 다음 this.parent.getAttribute(...);를 사용할 수있는 경우. 첫 번째 자식이 <div><div class="wannaselectthat"></div></div> 인 경우 색인을 0으로 설정합니다. 당신이 this에 대한 참조를 유지하려면

+0

나는 단어 "속성".I는 startPoint를 같은 이미지 뷰어의 개체 변수를 얻고 싶은에 대한 몇 가지 오해를 만드는 것이 유감, this.handleStartEvent 함수의 initScale. 답변 해 주셔서 감사합니다. –

+0

this.parent.getChildAt (index) .attr이 정상적으로 작동합니다. like this.parent.getChildAt (index) .id –

관련 문제