我在Chrome v95中调试一个AngularJS应用程序,在一个JavaScript文件的断点处暂停。
在“监视”面板中,我为"scope.currentScreenId“添加了一个条目,它显示了该变量的值。
但是当我展开"Scope“面板中的项时,我找不到那个currentScreenId变量。它不是一个局部变量,所以不会出现在" local“下。在“全局”下,我可以找到"scope“对象,但当我展开它时,它只显示了它下面的13个对象,不包括"currentScreenId”。最后显示的对象是"[Prototype]:Scope“。
当我在"scope“变量上添加一个Watch时,它同样只显示了它下面的13个对象。为什么像"currentScreenId“这样的子对象看起来是隐藏的,我如何浏览这些隐藏的对象?
如果我转到控制台并输入"scope.",自动完成弹出窗口会显示更多的子变量,包括currentScreenId。此列表是我希望在源代码页面的范围和/或监视部分中看到的内容。弹出窗口中显示的前12个项目与范围面板中显示的项目相匹配。为什么其他的不在那里显示呢?
在微软边缘浏览器v95中,它的工作原理与Chrome相同,只是在"scope“下显示了12个子对象,而不是13个。
发布于 2021-10-30 02:45:56
展开[[Prototype]]: Scope
,您将看到parent作用域属性--您应该在parent或parent的parent中找到您的属性。
这不是纯Angularjs特性--您可以在JS控制台中尝试以下代码:
a = {test1: 'test1'}
b = {test2: 'test2', __proto__: a}
b >> {test2: "test2", [[Prototype]]: Object}
b.test1 >> 'test1'
https://stackoverflow.com/questions/69776221
复制相似问题