지난번에 나는 "JavaScript 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점"에 대해 논의하는 기사를 썼습니다. 연구 결과, 메소드의 초기화 방법이 다른 것 외에는 원칙적으로 다른 차이점이 없다는 사실을 발견했습니다. 이는 어떤 메소드를 사용하더라도 동일하다는 것을 의미합니다. 그러나 나중에 VS.NET에서 프로토타입 메소드를 디버깅하기 위해 중단점을 설정할 때 두 정의 메소드 사이에 큰 차이가 있다는 것을 발견했습니다.
먼저 다음 코드 예제를 살펴보세요. 1 ToolBar.prototype.Dispose = function()
2 {
3 var elmt = this.GetElement() ***
4 select elmt.onsstart = '';
5 elmt.oncontentmenu = '';
6 elmt.clearAttributes();
7 // todo
8 }
여기서 코드가 잘못되었습니다. 디버거 VS.NET이 4행에서 코드 실행 커서를 중지하여 위로 끌 수 없게 했습니다. 위로 끌어올 수 있다면 다음 this.GetElement() 메서드를 실행할 수 있을 것 같습니다. 드래그할 수 없기 때문에 3번째 줄에 중단점을 설정하겠습니다. 설정한 후 디버거를 연결하면 왜 코드 3번째 줄에서 멈출 수 없나요? 디버거를 보면 VS.NET에 의해 코드의 첫 번째 줄에 중단점이 자동으로 설정되고 전체 ToolBar.prototype.Dispose 메서드가 강조 표시@_@됩니다. 그래서 3번째 줄에 중단점을 수동으로 설정하고 싶었지만 성공하지 못했습니다. 3행에 중단점이 설정되면 자동으로 1행으로 점프하지만 4, 5, 6과 같이 3행 이후의 코드 행에 설정할 수도 있습니다. 여기에는 코드의 세 번째 줄 앞에 쓸모없는 문을 추가하고(단순한 변수 정의는 작동하지 않습니다. 적어도 var a=1;), 현재 세 번째 줄을 네 번째 줄로 변경하는 추악한 해결책이 있습니다. 그게 다야. 이 버그는 정말 당황스럽습니다.
오늘 저는 ToolBar.prototype.Dispose = function()을 function ToolBar.prototype.Dispose()로 변경하면 이 문제가 해결될 수 있다는 것을 발견했습니다! 정말 이상해요! ~ 1function ToolBar.prototype.Dispose()
2{
3 var elmt = this.GetElement() ***
4 elmt.onselectstart = ''
5 elmt.oncontentmenu = ' ';
6 elmt.clearAttributes();
7 // todo
8}
위의 방법을 사용하면 3번째 줄에 마음대로 중단점을 설정할 수 있습니다. 이 문제는 VS.NET 2003과 VS.NET 2005 베타1 모두에 존재합니다. 이 문제가 여전히 존재하는지 확인하기 위해 VS.NET 2005 베타2를 구할 시간이 있는 사람이 있습니까?