什么是Chrome中的“未捕获的类型错误:非法调用”

What is "Uncaught TypeError: Illegal invocation” in Chrome?

本文关键字:错误 类型 非法 调用 Chrome 中的 什么      更新时间:2023-09-26

我有一个问题。想象一下,我们有这样的 html 文档:

<html>
  <head>
  </head>
  <body>
    <p id="1">Hi</p>
  </body>
</html>

当我写document.getElementById("1").__proto__;时 - 我得到了HTMLParagraphElement对象。它是 p 对象原型链(HTMLParagraphElement--> HTMLElement --> Element--> Node-->...(中的第一个原型对象。由于 Node 对象位于此链中,因此其所有属性和方法都可用于 HTMLParagraphElement 对象。当我在写document.getElementById("1").__proto__.parentNode;浏览器给我

未捕获的类型错误:非法调用。什么意思?我怎样才能知道这个 HTMLParagraphElement 对象到底在哪里连接到 BOM?例如,如果我正在编写变量 x=10;- 它是一个对象,它连接到窗口对象的根目录 (window.x;(。我想清楚地了解物料清单的结构。

如果需要访问元素的 parentNode,则应直接执行以下操作:

document.getElementById("1").parentNode

上面的行将返回对<body>节点的引用,并且适用于向上遍历 DOM。

否则

document.getElementById("1").__proto__.parentNode

这意味着您正在尝试获取类/类型HTMLParagraphElement的 parentNode,它不是一个元素,而是一种元素类型:元素类型没有父节点。

更合适的__proto__是:

document.getElementById("1").__proto__.__proto__

上面的行将为您提供HtmlElement类,尽管这不是很有用。

关于var x,应该注意的是,javascript中定义的变量不会附加到DOM上,全局变量会添加到windowwindow通过 window.document 连接到 DOM ,简而言之,只需键入document....命令即可访问。

相关文章: