在调试器中更改局部范围变量

时间:2013-03-29 15:14:31

标签: javascript ajax prototypejs scope magento-1.4

我一直在介绍一些JavaScript代码(在本例中是Prototype的AJAX库),以便瞥见responseText。我已经读过,在Firebug和IE Developer Tools中,您可以在断点处的本地范围内修改变量。

我看到我可以通过双击本地窗格中的变量或通过上下文菜单来实现此目的。我已经看到它的工作,但不是所有的时间,而不是我最需要的时候:正确的是,当responseText进来时我想编辑它。

为了说明这一点:

Debugging Ajax responses

我想更改突出显示的属性的值。

但这些变化没有反映出来。实际上,没有属性更改会反映在整个传输对象中。

我为什么要尝试这样做? 好吧,在responseText中有一段JavaScript由Prototype的evalScripts()方法执行,并且可能存在语法错误。这导致Magento在类别编辑表单上获得“白屏死机”。我在JavaScript中发现了我的语法错误,并在开发环境中修复了它。但是我也想在我的暂存环境(我没有写访问权限)中仔细检查这个修复程序。所以我的想法是在临时环境客户端页面请求上拦截responseText,更改它以修复JS错误,并让它通过以证明我的错误修复。

我可以等到这个代码在暂存时被推送和测试,但我真正的问题是要弄清楚为什么我可以修改一些本地范围变量而不是其他变量。

我希望我清楚地问过这个问题。任何帮助,将不胜感激。谢谢!

更新(Chrome): 我认为值得一提的是Chrome根本没有支持这一功能,但最近(3月21日)的发展正在进行中,根据这篇文章:

https://code.google.com/p/v8/issues/detail?id=212

但是,这个问题的海报解释了我不知道的调试引擎的一些基础组件。非常有见地。不回答我的问题,但仍然与该主题有关。

1 个答案:

答案 0 :(得分:0)

responseText属性是只读的!您会发现调试器或任何JS语句或表达式都无法修改该属性。在更改之前,您需要将其分配给另一个本地变量或属性。我为你操纵了a demonstration。您看到某些内置对象的某些属性的只读属性,其中XMLHttpRequest是一个。这不是调试或检查环境的问题,而是语言环境本身的一个特性。

请注意,虽然内置浏览器对象可以是只读的,但将自己的对象设置为只读更加困难。 Object.freeze方法exists in ES5,但并非在所有浏览器中都受支持(在撰写本文时,V8中的性能会受到影响)。