2012-03-23 2 views
0

작성자가 런타임에 특정 요소를 제거하기 위해 Element의 removeChild를 알 수있는 방법이 필요한 javascript 디버깅 세션에서 article을 읽었습니다. undefined() 함수로 사용했습니다.

그래서 그는 "정의되지 않은 글로벌 개체의 속성, 즉 그것이 글로벌 스코프의 변수이다."내가 아는 한 목적

javascript:void(Element.prototype.removeChild=function(){undefined()}) 

을 위해 다음과 같은 코드를 사용 (MDN에서 인용) 형식이 정의되지 않았습니다.

다음 줄에서 저자는 스택 추적을 얻는다 고 말합니다 (오페라와 잠자리에 주목하고 있음).

이 코드를 실행 시도, 그리고 그것은 그것이 사용할 작동하는 경우,하지만 난 단지

undefined() 

를 사용하려고하면 그것은 나에게 오류 줄 않습니다 "형식 오류를 정의되지는 함수가 아닙니다"하는 이해 했어.

아무도 언급 된 코드가 유효한 javascript로 작동하는 방법과 스택 추적을받는 문제를 해결하는 방법을 설명하십시오.

답변

6

저자가 undefined()을 호출하면 디버거에서 오류가 발생하여 해당 요소에 누가 removeChild을 호출하는지 파악할 수 있습니다.

또 다른 방법은 debugger; 문을 사용하는 것입니다. 디버거가 열려 있으면 중단 점을 강제 실행합니다.

+0

네, 그 말이 더 의미 있고 쉽게 이해할 수 있었을 것입니다 .... – Vishwanath

3

이것은 undefined이 함수가 아니기 때문에 특히 작동합니다. 즉, removeChild 함수가 호출 될 때 동일한 오류가 발생합니다. 이것은 오 - 매우 유용한 스택 추적을 생성합니다.

1

내가 질문을 이해 모르겠지만, 지금까지의 내가 그것을 실행하려고 할 때 디버거가되어 removeChild이 어디에 그를 볼 수 있도록, 열 것이다 있도록 무효 전화를 걸 수 있었는지 그가 한 말할 수있는 에서 전화하고 있습니다. 따라서 그의 undefined()은 귀하의 것과 마찬가지로 유효하지 않습니다.

3

의도적으로 예외가 발생합니다. 디버거를 시작하려면

javascript:void(Element.prototype.removeChild=function(){debugger;}) 

:

A fast way to find the code that would call removeChild() would be to simply make removeChild() throw an exception

또한 뭔가를 할 수 있습니다.