2012-03-23 19 views
0

私はarticleをjavascriptのデバッグセッションで読んでいました。作成者は要素のremoveChildを知るために必要でした。実行時に特定の要素を削除しています。未定義()関数として使用

そこで彼は目的

私の知る限りでは
javascript:void(Element.prototype.removeChild=function(){undefined()}) 

次のコードを使用し、「未定義のは、すなわち、それはグローバルスコープ内の変数である、グローバルオブジェクトのプロパティです。」 (MDNから引用)タイプは未定義です。

次の行で、作者はスタックトレースを取得すると述べています(彼はオペラとトンボで作業しています)。私はこのコードを実行しようとしている、そしてそれである使用された場合、それは動作しますが、私は唯一の

undefined() 

を使用しようとするとそれは私にエラーを与えてい

「例外TypeError:未定義は関数ではありません」、これわかりました。

誰でも、上記のコードが有効なjavascriptとしてどのように動作しているのか、そしてスタックトレースを取得する方法の問題を解決する方法を説明できますか?

答えて

6

undefined()を呼び出すと、エラーが発生し、デバッガでその要素を呼び出して、その要素に誰が呼び出すのかを知ることができます。

もう1つの方法は、代わりに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

また、のような何かを行うことができます。

関連する問題