Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以覆盖window.console?它是只读的吗?_Javascript_Browser - Fatal编程技术网

Javascript 是否可以覆盖window.console?它是只读的吗?

Javascript 是否可以覆盖window.console?它是只读的吗?,javascript,browser,Javascript,Browser,我使用javascript中的控制台对象进行调试,并希望覆盖它,以便在移动浏览器中使用此类功能 但是,我很难理解以下MDN文档 Window.console只读属性返回对 Console对象,它提供将信息记录到 浏览器的控制台 () 特别是: 我不知道界面到底是什么,但它似乎与全局窗口属性不同 测试表明(在当前的Chromium和Firefox中),window.console确实可以被事件覆盖,尽管它似乎与我在文档中读到的内容相矛盾。(这种覆盖的一个例子提供了;即使注释对象具有 无法使用win

我使用javascript中的
控制台
对象进行调试,并希望覆盖它,以便在移动浏览器中使用此类功能

但是,我很难理解以下MDN文档

Window.console只读属性返回对 Console对象,它提供将信息记录到 浏览器的控制台

()

特别是:

  • 我不知道界面到底是什么,但它似乎与全局
    窗口
    属性不同
  • 测试表明(在当前的Chromium和Firefox中),window.console确实可以被事件覆盖,尽管它似乎与我在文档中读到的内容相矛盾。(这种覆盖的一个例子提供了;即使注释对象具有
  • 无法使用window.console={…},因为window.console是 只读属性!–Luillyfe 2月23日21:28


    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打开时,它是
      窗口
      的自有属性,而不是只读的。)

    我已经更新了MDN页面,删除了那个句子中的“只读”部分


    我并不是说用其他东西来替换<代码>控制台< /代码>是一个好主意。-但是,注意,如果你有“显示控制台”选项(默认情况下),那么自己的堆栈片段就可以做到。 <强> >窗口是用JS引擎的本地代码编写的接口(如V8中的C++).它是窗口全局变量的原型,将此接口公开给JavaScript


    我认为这是造成混淆的主要原因-您无法覆盖Window.console,因为您无法通过JavaScript与窗口进行真正的交互。但是,您可以使用Window.console进行交互,因为该对象暴露于JavaScript(实际上是浏览器环境的“根”对象).

    谢谢,我非常感谢您提供的信息(包括在6个用户代理中进行了测试)。我必须阅读更多提供的规范,以了解属性上下文中窗口界面的真正含义。因此,为了确保您认为MDN中关于Window.console是属性的信息不正确,或者只是它是只读的?@humanityANDpeace-我已更新了答案,试图对window
    vs.
    window
    。我还修复了MDN页面。我希望大部分(或全部)都是这样剩下的部分没问题,只是有人在编写/编辑它时做出了一个似乎不真实的假设。控制台规范将
    Console
    定义为标识WebIDL的属性,我看到WebIDL规范说“该属性具有属性{[[writeable]]:true、[[Enumerable]]:false、[[Configurable]]:true}。“-所以我认为这意味着
    控制台
    被正式/规范地定义为可写。@sideshowbarker-谢谢。我想知道是否有关于名称空间对象的定义。我已经更新了答案,将其折叠起来,但是如果您更愿意发布自己的答案,请告诉我,我会编辑以仅参考您的答案。很好的一个!对于任何关注上面MDN链接但没有看到“只读”的人来说:当humanityANDpeace发布这个问题时,它就在那里。我更新了MDN页面,请参阅下面我的答案了解原因。