Javascript 是否可以覆盖window.console?它是只读的吗?
我使用javascript中的Javascript 是否可以覆盖window.console?它是只读的吗?,javascript,browser,Javascript,Browser,我使用javascript中的控制台对象进行调试,并希望覆盖它,以便在移动浏览器中使用此类功能 但是,我很难理解以下MDN文档 Window.console只读属性返回对 Console对象,它提供将信息记录到 浏览器的控制台 () 特别是: 我不知道界面到底是什么,但它似乎与全局窗口属性不同 测试表明(在当前的Chromium和Firefox中),window.console确实可以被事件覆盖,尽管它似乎与我在文档中读到的内容相矛盾。(这种覆盖的一个例子提供了;即使注释对象具有 无法使用win
控制台
对象进行调试,并希望覆盖它,以便在移动浏览器中使用此类功能
但是,我很难理解以下MDN文档
Window.console只读属性返回对
Console对象,它提供将信息记录到
浏览器的控制台
()
特别是:
窗口属性不同
Window.console
或Window.console
的只读性是什么?它不是只读的。MDN是一个很好的资源,但它是由社区编辑的,有时会出现错误或未经来源的声明
窗口
接口,但它似乎与全局窗口属性不同Window
定义了浏览器中Window对象可用的属性和方法,该属性和方法可通过默认的Window
全局变量使用。您可以将其视为:var Window=new Window()
,当然这不是真的
Window.console
或Window.console
的只读性是什么?”- 理论:根本没有提到
,但说它是控制台
上公开的名称空间对象。WebIDL规范说,默认情况下,它们是可写、可配置和不可枚举的。(感谢您指出!)窗口
- 实践:它可以在我试用过的每个浏览器(Chrome、Firefox、Safari、IE9、IE11、Edge)上写入。在除IE11之外的所有浏览器中,
都是对象控制台
引用的“自有”属性,并分配给它(在松散模式和严格模式下)。(IE11是一个奇怪的鸭子:窗口
在devtools关闭时不是控制台
的自有属性,但它的类型是窗口
,如果您记录对象
它的结果是字符串(控制台)
。但是当devtools打开时,它是“[对象控制台]”
的自有属性,而不是只读的。)窗口
我并不是说用其他东西来替换<代码>控制台< /代码>是一个好主意。-但是,注意,如果你有“显示控制台”选项(默认情况下),那么自己的堆栈片段就可以做到。
我认为这是造成混淆的主要原因-您无法覆盖Window.console,因为您无法通过JavaScript与窗口进行真正的交互。但是,您可以使用Window.console进行交互,因为该对象暴露于JavaScript(实际上是浏览器环境的“根”对象).谢谢,我非常感谢您提供的信息(包括在6个用户代理中进行了测试)。我必须阅读更多提供的规范,以了解属性上下文中窗口界面的真正含义。因此,为了确保您认为MDN中关于Window.console是属性的信息不正确,或者只是它是只读的?@humanityANDpeace-我已更新了答案,试图对
window
。我还修复了MDN页面。我希望大部分(或全部)都是这样剩下的部分没问题,只是有人在编写/编辑它时做出了一个似乎不真实的假设。控制台规范将Console
定义为标识WebIDL的属性,我看到WebIDL规范说“该属性具有属性{[[writeable]]:true、[[Enumerable]]:false、[[Configurable]]:true}。“-所以我认为这意味着控制台
被正式/规范地定义为可写。@sideshowbarker-谢谢。我想知道是否有关于名称空间对象的定义。我已经更新了答案,将其折叠起来,但是如果您更愿意发布自己的答案,请告诉我,我会编辑以仅参考您的答案。很好的一个!对于任何关注上面MDN链接但没有看到“只读”的人来说:当humanityANDpeace发布这个问题时,它就在那里。我更新了MDN页面,请参阅下面我的答案了解原因。