undefined()用作函数

时间:2012-03-23 11:14:20

标签: javascript undefined

我正在javascript调试会话中阅读article,其中作者需要一种方法进入removeChild of Element以了解哪些代码在运行时删除了一个特定元素。

所以他使用以下代码

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

据我所知,“undefined是全局对象的属性,即它是全局范围内的变量。”(引自MDN) typeof未定义。

在下一行中,作者说他得到了堆栈跟踪(注意他正在使用opera和dragonfly)。

我已尝试执行此代码,如果使用它,它可以工作,但如果我尝试仅使用

undefined()

它确实给我错误“TypeError:undefined不是函数”,我理解。

任何人都可以解释一下这些代码如何作为有效的javascript工作,以及它如何解决获取堆栈跟踪的问题。

4 个答案:

答案 0 :(得分:6)

当作者调用undefined()时,会导致错误发生,他正在调试器中捕获,这样他就可以找出谁在该元素上调用removeChild

另一种方法是使用debugger;语句,如果调试器打开则会强制断点。

答案 1 :(得分:3)

这特别有效,因为undefined不是函数,这意味着当调用removeChild函数时,它会抛出相同的错误。这产生了非常有用的堆栈跟踪。

答案 2 :(得分:3)

它故意抛出异常。

  

找到调用removeChild()的代码的快速方法是   只需让removeChild()抛出异常

您还可以执行以下操作:

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

启动调试器。

答案 3 :(得分:1)

我不确定我是否理解这个问题,但据我所知,他所做的是进行无效的调用,以便调试器在尝试执行时打开,从而允许他查看调用removeChild的位置。所以他的undefined()和你的一样无效,这就是它的重点。