gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:39:53 27 4
gpt4 key购买 nike

我一直在单步执行一些 JavaScript 代码(在本例中为 Prototype 的 AJAX 库)以瞥见 responseText。我在 Firebug 和 IE 开发者工具中读到过,您可以在断点处的任何本地范围内修改变量。

我发现我可以通过双击本地 Pane 中的变量或通过上下文菜单来执行此操作。我已经看到它有效,但不是所有时间都有效,而且不是在我最需要它的时候:就在响应文本出现时,我想编辑它。

为了说明这一点:

Debugging Ajax responses

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

但是这些变化没有反射(reflect)出来。事实上,没有任何属性变化反射(reflect)在整个传输对象中。

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

我可以等到这段代码被推送并在暂存阶段进行测试,但我问这个问题的真正目的是弄清楚为什么我可以修改一些局部范围变量而不是其他变量。 p>

希望我已经问清楚了。任何帮助,将不胜感激。谢谢!

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

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

不过,这个问题的发帖人解释了一些我不知道的调试引擎的底层组件。很有见地。没有回答我的问题,但仍然与主题相关。

最佳答案

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

请注意,虽然内置浏览器对象可以是只读的,但很难将您自己的对象设置为只读。 Object.freeze 方法 exists in ES5 ,但并非所有浏览器都支持(并且在撰写本文时在 V8 中会带来性能损失)。

关于javascript - 在调试器中更改局部范围变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15706038/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com