2013-10-20 6 views
0

2006 년에 작성된 스크립트를 사용하여 모범 사례를 따르고 나중에 부 프로젝트에 포함 할 수 있도록 스크립트를 다시 작성합니다. JSHint.com을 사용하여 문제를 파악하고 발견 한 다른 문제에 대한 솔루션을 검색합니다. 그러나 JSHint의 "Do not use 'with' '오류를 해결할 수 없습니다. 여기 코드는 다음과 같습니다해결 JSHint의 "권장 사항과 함께 사용하지 마십시오"

DragResize.prototype.select = function (newElement) { 

    with(this) { 
     // Selects an element for dragging. 
     if (!document.getElementById || !enabled) return; 

     // Activate and record our new dragging element. 
     if (newElement && (newElement != element) && enabled) { 
      element = newElement; 

      // Elevate it and give it resize handles. 
      element.style.zIndex = ++zIndex; 
      if (this.resizeHandleSet) this.resizeHandleSet(element, true); 

      // Record element attributes for mouseMove(). 
      elmX = parseInt(element.style.left); 
      elmY = parseInt(element.style.top); 
      elmW = element.offsetWidth; 
      elmH = element.offsetHeight; 
      if (ondragfocus) this.ondragfocus(); 
     } 
    } 

}; 

내가 발견 할 수있는 유일한 설명은 여기에 하나입니다 http://jslinterrors.com/unexpected-with,하지만 위의 코드에 적용하는 방법을 모르겠어요. 어떤 도움이 필요합니까?

답변

0

그 코드는 with 성명이 작동하기에 너무도 끔찍한 이유 중 훌륭한 예입니다! JSHint 경고를 해결하려면 with 문 본문에 언급 된 식별자 중 실제로 DragResize 인스턴스 (this)의 속성이고 실제로 외부 범위의 변수에 대한 참조인지 알아야합니다. 예를 들어, element은 인스턴스의 속성입니다, 경우

, 당신은 this와 그 참조를 접두사해야합니다

DragResize.prototype.select = function (newElement) { 

    if (!document.getElementById || !enabled) return; 

    if (newElement && (newElement != element) && enabled) { 
     this.element = newElement; 
// ^prefix instance properties with reference to the instance 

     this.element.style.zIndex = ++zIndex; 
     if (this.resizeHandleSet) this.resizeHandleSet(element, true); 

     // ... 

    } 
}; 
+0

나는 많은 다른 구성에서이 작업을 시도했지만 아무것도의 작업했다. 약 7 가지가 더 있습니다. 전체 스크립트에 대한 링크를 게시해야합니까? –